各类排序算法总结

来源:互联网 发布:三体 死神永生 知乎 编辑:程序博客网 时间:2024/06/04 17:44

内部排序分类
以上是内部排序方法的一个分类框图。
首先,我们来分析一下各类排序方法所基于的基本原理

  • 插入排序:将待排序的序列中的元素一个一个地插入到已经排序好的有序序列中。
  • 快速排序:通过一趟排序将待排序列分割成两个部分,一个部分的所有关键字都比另一个部分的关键字小,然后再按照此方法对这两个部分的数列进行上述操作。
  • 选择排序:每次从待排序列中选出最大或者最小的元素。只到待排序列中所有的元素均被选出。
  • 归并排序:将相邻的两个有序子序列归并为一个有序序列。
  • 基数排序:将待排序列中的元素分成由若干个基数组成,被分成了多少个基数排序就要排多少趟。在每一趟中,将每个元素分到各自的基数组中去。然后再将这些含有元素的基数组依次串联起来。

各类排序方法的比较:

 

表排序
对上表进行总结:
1. 从平均性能上来说,快速排序的速度最佳,其所需的时间是最省的,但是其最坏情况下的时间性能不如堆排序和归并排序。
2. 对堆排序和归并排序进行比较:在n较大的时候,归并排序所需的时间较堆排序的时间省,但是它所需要的空间较多。
3. 基数排序的时间复杂度也可以写成O(d*n)。因此它最适合于n很大而关键字较小的序列。
4. 从方法的稳定性上来看,基数排序和所有的时间复杂度为O(n2)的排序方法均是稳定的排序方法;同时归并排序也是稳定的排序。然而,希尔排序、快速排序和堆排序等时间性能较好的排序方法是不稳定的。


按照平均时间对排序进行分类:
1. 平方阶O(n2)的排序
    各类简单排序,即除希尔排序以外的所有插入排序、简单选择排序和,冒泡排序。
2. 线性对数阶O(nlogn)的排序
    快速排序、堆排序、归并排序
3. O(n1+x)的排序
    希尔排序
4. 线性阶排序O(n)
    基数排序


排序算法的选择:
1. 当n较小的时候,可以采用直接插入排序,简单选择排序等。
2. 当待排序序列有序或基本有序时,可以采用直接插入排序,冒泡排序等。
3. 当n较大的时候,应该选择时间复杂度为O(nlogn)的排序方法:快速排序、堆排序、归并排序。

  • 快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序列是随机的时候,其平均时间是最短的。但是,当待排序列基本有序的时候,快速排序将退化为冒泡排序。它是不稳定的排序。
  • 堆排序虽然不会出现快速排序可能出现的最坏情况。但是它需要建堆过程。它也是不稳定的排序方法。
  • 归并排序是稳定的排序算法,但它有一定的数量的数据移动。

4. 基数排序
     它是一种稳定的排序算法,但是有一定的局限性:
     1) 关键字可分解
     2) 记录的关键字位数较少,如果密集更好。
     3) 如果是数字时,最好是无符号的,否则将增加相应的映射复杂度。

0 0
原创粉丝点击