排序的稳定性

来源:互联网 发布:美女图片源码带采集 编辑:程序博客网 时间:2024/05/21 17:26

一,稳定的排序    时间复杂度 空间复杂度  

气泡排序     最差,                                                     平均是O(n*n),最好是O(n)   1

鸡尾酒排序(CockTail, 双向冒泡) 最差, 平均是O(n*n),最好是O(n)    1

插入排序         最差,                                                 平均是O(n*n),最好是O(n)                                1

归并排序       最差,                                                   平均,最好是O(nlogn)O(n)

桶排序                                                    O(n)O(k)

基数排序   O(d*n)(d是常数)                                                          O(n)

二叉树排序                                       O(n*logn)                           O(n)

图书馆排序                                       O(n*logn)



不稳定的排序:

选择排序 最差,平均都是O(n*n)     1

希尔排序 O(n*logn)1

堆排序 最差、平均、最好都是O(n*logn)     1

快速排序 平均(n*logn),最坏情况下O(n*n)         O(logn)


三种简单排序算法,分别为冒泡法,选择排序法和插入法


简单排序中直接插入排序最好,快速排序最快 。

当文件为正序的时候,直接插入排序和冒泡排序最佳。


不同条件下排序方法的选择:

1,若n较小(如n<= 50),可以直接插入或者直接选择排序。

2,若文件初始状态基本有序,则应该选用直接插入排序、冒泡排序或者随机的快速排序为宜。

3,若n较大,则应该采用复杂度为O(n*logn)的排序方法(快速排序,堆排序,或者归并排序)。

快速排序被认为是目前基于比较的内部排序中最好的方法。当待排序的关键字随机分布时,快速排序的时间最短。

堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。

而堆排序,每次排序的结果就是找到当前堆中的最大/最小值。
因此完成需求的时间复杂度为O(logN)。
当我们需要找到常数级的最大/最小值时,往往堆排序是我们应该最先考虑的

若要求排序稳定,则可选用归并排序。先利用直接插入排序求得较长的有序子文件,然后再两两归并。



 在最坏情况下,时间复杂度为O(nlog2 n)的为归并排序和堆排序









0 0