排序算法总结

来源:互联网 发布:计算机编程自学网站 编辑:程序博客网 时间:2024/06/07 05:51

排序算法总览

排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。内排序有可以分为以下几类:

(1)、插入排序:直接插入排序、二分法插入排序、希尔排序。
(2)、交换排序:冒泡排序、快速排序。

(3)、选择排序:简单选择排序、改进的简单选择排序、堆排序。
(4)、归并排序
(5)、线性时间排序:基数排序、计数排序、桶排序

算法复杂度及稳定性分析:

                            


平均情况下,快速排序最快;

最好情况下,直接插入排序和冒泡排序最快;

最坏情况下,堆排序和归并排序最快。


稳定排序:直接插入排序、冒泡排序、改进简单选择排序、归并排序、基数排序

    不稳定排序:谢尔排序、快速排序、简单选择排序、堆排序


简单的排序算法:直接插入排序、冒泡排序、简单选择排序、改进简单选择排序、   (简单性:编写、阅读)

不简单排序算法:谢尔排序、快速排序、堆排序、归并排序、基数排序


若想选既稳定又高效的排序,选归并排序;

若不想通过关键字比较来排序,选基数排序;

当n较小时,可选简单的排序算法,易理解,容易编写;

当n较大时,应选高效的排序方法:只求快速,不顾稳定,选快速排序;若要稳定,则选归并排序。


(1)n较小,记录基本有序,要求稳定,直接插入排序或冒泡排序

(2)n较小,记录所含数据量大,数据项多,不要求稳定,简单选择排序

(3)n较大,关键字值分布较均匀随机,不要求稳定,快速排序

(4)n较大,关键字值分布可能出现正序或倒序,要求稳定,归并排序

(5)n较大,关键字值分布可能出现正序或倒序,不要求稳定,堆排序

(6)待排记录关键字值具有很好的结构特性,比如为r进制整数或字母构成,基数排序

(7)n较大,只需找出关键字值最小的前k个记录,简单选择排序或堆排序

(8)n较大,只需找出关键字值为第k大的记录,快速排序


常用排序算法的性能与待排数组的分布的关系作一个总结:
1)冒泡:无关;
2)选择:无关;
3)插入:有关,有序程度越大,比较越少;
4)shell:有关,它的基本思想基于插入排序;
5)合并:有关,有序程度愈大,合并过程的比较次数越少;
6)堆排序:有关,有序程度越大,建立堆下沉操作越少;
7)快排序:有关,如果选择最后值作为阀值,那么有序程度越好,就越可能退化成O(n^2);
  无关,随机选择阀值,那么与排序程度无关。