内部排序算法的比较及应用

一、内部排序算法的比较 

从时间复杂度来看:

  • 简单选择排序、直接插入排序和冒泡排序平均情况下都为O(n²),且实现过程也比较简单,插入排序和冒泡排序最好情况下可以达到O(n),而简单选择排序与序列的初始状态无关
  • 希尔排序作为插入排序的拓展,对较大规模的排序都可以达到很高的效率,但目前未得出精确的渐进时间。
  • 堆排序利用了一种称为堆的数据结构,可在线性时间内完成建堆,且在O(nlog₂n)内完成排序过程。
  • 快速排序基于分治的思想,虽然最坏情况下快速排序会达到O(n²),但是快速排序的平均性能可以达到O(nlog₂n)
  • 归并排序同样基于分治的思想,但由于其分治的思想,但由于其分隔子序列与初始序列的排列无关,因此它的最好、最坏和平均时间复杂度均为O(nlog₂n)

从空间复杂度来看:

  • 简单选择排序、插入排序、冒泡排序、希尔排序和堆排序仅需要借助常数个辅助空间。
  • 快速排序在空间上只使用一个小的辅助栈,用于是实现递归,平均情况下大小为O(log₂n),最坏情况下可能达到O(n)
  • 2路归并排序在合并操作中需要借助较多的辅助空间用于元素复制,大小为O(n)。

算法种类

时间复杂度

空间复杂度

是否稳定

最好情况

平均情况

最坏情况

直接插入排序

O(n)

O(n²)

O(n²)

O(1)

冒泡排序

O(n)

O(n²)

O(n²)

O(1)

简单选择排序

O(n²)

O(n²)

O(n²)

O(1)

希尔排序

 

 

 

O(1)

快速排序

O(nlog₂n)

O(nlog₂n)

O(n²)

O(log₂n)

堆排序

O(nlog₂n)

O(nlog₂n)

O(nlog₂n)

O(1)

2路归并排序

O(nlog₂n)

O(nlog₂n)

O(nlog₂n)

O(n)

基数排序

O(d(n+r))

O(d(n+r))

O(d(n+r))

O(r)

二、内部排序算法的应用

  1. 选取排序方法需要考虑的因素

    1. 待排序的元素数目
    2. 元素本身信息量的大小
    3. 关键字的结构及其分布情况
    4. 稳定性的要求
    5. 语言工具的条件,存储结构及辅助空间的大小等
  2. 排序算法小结

    1. 若待排序的元素个数较小(小于50),可以直接插入排序或者简单选择排序.
    2. 若文件的初始状态已按关键基本有序,则选用直接插入或冒泡排序
    3. 若排序元素较大,应该采用时间复杂度为O(nlog₂n)的排序:快速排序、堆排序、归并。其中快速平均时间最短,堆辅助空间小于快速排序,不会出现快速排序的最坏情况,但是二者都不稳定。若是要求排序稳定,选择归并排序。
    4. 任何借助比较的排序算法至少需要O(nlog₂n)的时间
    5. 若n很大,记录的关键字位数又比较小且可以分解,采用基数排序较好。
    6. 当记录本身信息量较大时,为避免耗费大量时间移动记录,可以用链表作为存储结构。
发布了82 篇原创文章 · 获赞 52 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/iostream992/article/details/97303756