您的位置:首页 > 其它

排序的稳定性

2016-04-01 09:41 162 查看
一,稳定的排序 时间复杂度 空间复杂度

气泡排序 最差, 平均是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)的为归并排序和堆排序

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: