数据结构之内部排序小结

本文比较了多种排序方法的时间复杂度、辅助空间需求以及稳定性,并根据待排序数据特点给出了建议,如小规模数据用直接插入或简单选择,基本有序用插入或冒泡,位数少的数据用基数排序,大规模数据选快速、堆或归并排序,同时考虑排序稳定性及存储结构的选择。
摘要由CSDN通过智能技术生成

  综合比较所讨论的各种排序方法,大致结果如下表所示。

排序方法时间复杂度辅助空间稳定性
直接插入O(n2)O(1)稳定
简单选择O(n2)O(1)不稳定
冒泡排序O(n2)O(1)稳定
希尔排序O(n1.3)O(1)不稳定
快速排序O(n㏒n)O(㏒n)不稳定
堆排序O(n㏒n)O(1)不稳定
归并排序O(n㏒n)O(n)稳定
基数排序O(d(n+rd))O(d)稳定

  迄今为止,已有的排序方法远远不止上述几种,人们之所以热衷于研究各种排序方法,不仅是由于排序在计算机运算中所处的重要位置,还因为不同的方法各有优缺点,可根据需要应用到不同的场合。在选取排序方法时需要考虑的因素有待排序的记录个数 n、记录本身的大小、关键字的分布情况、对排序稳定性的要求、语言工具的条件和辅助空间的大小。
  依据这些因素,可以得到以下几点结论。
  (1)若待排序的记录数目 n 较小,可采用直接插入排序和简单选择排序。由于直接插入排序所需的记录移动操作较简单选择排序多,因而当记录本身信息量较大时,用简单选择排序方法较好。
  (2)若待排序记录按关键字基本有序,宜采用直接插入排序或冒泡排序。
  (3)当n 很大且关键字的位数较少时,采用链式基数排序较好。
  (4)若n 较大,则应采用时间复杂度为 O(n㏒n)的排序方法,例如快速排序、堆排序或归并排序。快速排序目前被认为是内部排序方法中最好的方法,当待排序的关键字为随机分布时,快速排序的平均运行时间最短,但堆排序只需一个辅助存储空间,并且不会出现在快速排序中可能出现的最坏情况。这两种排序方法都是不稳定的排序方法。若要求排序稳定,可选择归并排序。通常将归并排序和直接插入排序结合起来使用。先利用直接插入排序求得较长的有序子序列,然后再两两归并。因为直接插入排序是稳定的,所以改进的归并排序也是稳定的。
  前面讨论的内部排序算法(除基数排序外)都是在一维数组上实现的。当记录本身信息量较大时,为避免耗费大量的时间移动记录,可以采用链表作为存储结构,在这种情况下,希尔排序、快速排序和堆排序就不适用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值