首页 > 代码库 > 算法 - 内部排序方法总结

算法 - 内部排序方法总结

各种排序方法的性能比较
排序方法最好时间复杂度平均时间复杂度最坏时间复杂度空间复杂度稳定性
直接插入排序O(n)O(n2)O(n2)O(1)稳定
简单选择排序O(n2)O(n2)O(n2)O(1)不稳定
冒泡排序O(n)O(n2)O(n2)O(1)稳定
希尔排序O(n1.25)O(1)不稳定
快速排序O(nlog2n)O(nlog2n)O(n2)O(log2n)~O(n)不稳定
堆排序O(nlog2n)O(nlog2n)O(nlog2n)O(1)不稳定
归并排序O(nlog2n)O(nlog2n)O(nlog2n)O(1)稳定

不同的排序方法各有优缺点,可根据需要运用到不同的场合。选取排序方法时需要考虑的主要因素有:待排序的记录个数n;记录本身的大小;关键字的分布情况;对排序稳定性的要求;语言工具的条件;辅助空间的大小等。

依据这些因素,可以得到以下同点结论:

(1)若待排序的记录数n较小时,可采用插入排序和简单选择排序。由于直接插入排序所需的记录移动操作较选择排序多,因此当记录本身信息量较大时,用直接选择排序方法较好。

(2)若待排序记录按关键字基本有序,则宜采用直接插入排序或冒泡排序。

(3)当n很大且关键字的位较少时,采用链式基数排序较好。

(4)若n较大,则应采用时间复杂度为O(nlog<sub>2</sub>n)的排序方法,例如快速排序、堆排序或归并排序。

快速排序是目前内部排序方法中被认为是最好的方法,当待排序的关键字随机分布时,快速排序的平均时间最短;堆排序只需一个辅助存储空间,并且不会出现在快速排序中可能出现的最坏情况。这两种方法都是不稳定的排序方法,若要求排序稳定,可选择归并排序。通常可将归并排序和直接插入排序结合起来使用。先利用直接插入排序求得较长的有序子文件,然后再两两归并。

内部排序算法一般都是在一维数组上实现的。当记录本身信息量较大时,为避免耗费大量的时间移动记录,可以采用链表作为存储结构。

算法 - 内部排序方法总结