各种排序算法的比较

来源:互联网 发布:知屋金融 骗局 编辑:程序博客网 时间:2024/05/18 01:52

各排序算法的性能见下表:

排序算法 最好时间 平均时间 最坏时间 辅助存储 稳定性 备注 简单选择排序 O(n2) O(n2) O(n2) O(1) 不稳定 n小时比较好 直接插入排序 O(n) O(n2) O(n2) O(1) 稳定 大部分已有序时 冒泡排序 O(n) O(n2) O(n2) O(1) 稳定 n小时比较好 希尔排序 O(n) O(nlogn) O(ns) O(1) 不稳定 s(1<s<2)是所选分组 快速排序 O(nlogn) O(nlogn) O(n2) O(logn) 不稳定 n大时比较好 堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定 n大时比较好 归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定 n大时比较好

从该表中可以得到以下几方面的结论:

1) 稳定性

首先。如何判断排序方法是不是稳定的,

简单地说,所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,就称这种排序方法是稳定的,反之,就是非稳定的。例如,一组数排序之前是 a1,a2,a3,a4,a5,其中 a2 = a4,经过某种排序后 a1,a2,a4,a3,a5,则说这种排序是稳定的,因为 a2 排在 a4 的前面,排序后它还是在 a4 的前面。假如变成 a1,a2,a2,a3,a5 就不是稳定的了。

各种排序算法中稳定性的排序算法有:直接插入排序、冒泡排序、快速排序和归并排序;
不稳定的排序算法有 希尔排序、快速排序、简单选择排序和堆排序。

2) 时间复杂度

时间复杂度为 O(n2)的排序算法有:直接插入排序、冒泡排序、快速排序、简单选择排序;
时间复杂度为 O(nlogn)的排序算法有:堆排序、归并排序。

3) 空间复杂度

空间复杂度为 O(1) 的算法有:简单选择排序、直接插入排序、冒泡排序、希尔排序、堆排序;
空间复杂度为 O(n) 的算法:归并排序;
空间复杂度为 O(logn) 的算法:快速排序。

4) 效率

初始序列整体或局部有序时,直接插入排序和冒泡排序算法会有较高效率;快速排序算法的效率会下降。

排序序列较小且不要求稳定性时,直接选择排序效率较好;要求稳定性时,冒泡排序效率较好。

除了以上这几种排序算法外,还有位图排序、桶排序、基数排序等。每种排序算法都有其最佳适用场合,如何,当待排序数据规模巨大,而对内存大小又没有限制时,位图排序是最高效的排序算法,所以,在使用排序算法时,一定要结合实际情况进行分析。

1 0
原创粉丝点击