一、排序分类

内部排序:整个排序过程不需要访问外存便能完成。
外部排序:参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成。

各种排序算法总结


二、性能比较
 

排序方法 平均情况 最好情况 最坏情况 空间 稳定性
冒泡 O(n2) O(n) O(n2) O(1) 稳定
简单选择排序 O(n2) O(n2) O(n2) O(1) 不稳定
直接插入排序 O(n2) O(n) O(n2) O(1) 稳定
希尔排序 O(nlogn) ~ O(n2) O(n1.3) O(n2) O(1) 不稳定
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定
归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定
快速排序 O(nlogn) O(nlogn) O(n2) O(logn)~O(n) 不稳定


三、应用场景

(1)若n较小(如n≤50),可采用直接插入或直接选择排序。 
 当记录规模较小时,直接插入排序较好,否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。 
(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜。 
(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。 
    快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短。
    堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。 
    若要求排序稳定,则可选用归并排序。但前面介绍的从单个记录起进行两两归并的排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子序列,然后再两两归并之。因为直接插入排序是稳定 的,所以改进后的归并排序仍是稳定的。

相关文章: