十大经典排序(1)(本文均来自课本,互联网)

本文探讨了内排序(包括比较和非比较类)与外排序的区别,重点介绍了排序算法的性能指标、正序和反序的概念,以及内排序的稳定性。针对不同场景提供了排序算法选择建议,如小规模数据的简单排序,大规模数据的高效算法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、基本概念

1.  排序的分类

1.1  内排序和外排序

1.2  内排序的分类

1.3  外排序的分类

1.4   排序算法的性能

1.5  正序和反序

1.6  内排算法的稳定性

1.7  排序方法的时空复杂度及稳定性

 二、算法的选择

2.1  选择排序算法的依据

2.2  排序算法选择的建议


一、基本概念

1.  排序的分类

1.1  内排序和外排序

内排序:整个表都放在内存中处理,排序时不涉及数据的内外存交换。

外排序:  在许多实际应用中,经常需要对大文件进行排序,因为文件中的记录很多,信息量庞大,无法将整个文件拷贝进内存进行排序。因此,需要将带排序的记录存储在外存上,排序时再把数据一部分一部分的调入内存进行排序,在排序中需要多次进行内外存的交互,对外存文件中的记录进行排序后的结果仍然被放到原有文件中。这种排序方法就称外部排序。

(简而言之,排序时不断进行数据的内外存交换,叫外排序)

1.2  内排序的分类

  • 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。
  • 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。
  • 1.3  外排序的分类

  • 1.4   排序算法的性能

1.5  正序和反序

正序:待排序元素的关键字顺序正好和要排序的顺序相同。

反序:待排序元素的关键字顺序正好和要排序的顺序相反。

1.6  内排算法的稳定性

  • 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
  • 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。

1.7  排序方法的时空复杂度及稳定性

 二、算法的选择

2.1  选择排序算法的依据

影响排序的因素有很多,平均时间复杂度低的算法并不一定就是最优的。相反,有时平均时间复杂度高的算法可能更适合某些特殊情况。同时,选择算法时还得考虑它的可读性,以利于软件的维护。

2.2  排序算法选择的建议

1、若n较小(n<=50),则可以采用直接插入排序或者简单选择排序。由于直接插入排序所需的记录移动操作较简单选择排序多,因而当记录本身信息量较大时,用简单选择排序较好。

2、若文件的初始状态已按关键字基本有序,则选择直接插入或者冒泡排序为宜。

3、若n较大,则应采用时间复杂度为O(nlogn)的排序方法:快速排序、堆排序或归并排序。快排被认为目前基于比较的内部排序法中最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短。

堆排序所需的辅助空间少于快排,并且不会出现快排可能出现的最坏情况,这两种排序都是不稳定的。若要求排序稳定且时间复杂度为O(nlogn),则可以选择归排序。

4、若n很大,记录的关键字位数较少且可以分解时,采用基数排序较好。

5、当记录本身信息量较大时,为避免耗费大量的时间移动记录。可用链表作为存储结构。

1) 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:
快速排序、堆排序或归并排序序。
快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
堆排序 : 如果内存空间允许且要求稳定性的,
归并排序:它有一定数量的数据移动,所以我们可能过与插入排序组合,先获得一定长度的序列,然后再合并,在效率上将有所提高。
2)当n较大,内存空间允许,且要求稳定性:归并排序
3)当n较小,可采用直接插入或直接选择排序。
直接插入排序:当元素分布有序,直接插入排序将大大减少比较次数和移动记录的次数。
直接选择排序 :元素分布有序,如果不要求稳定性,选择直接选择排序
4)一般不使用或不直接使用传统的冒泡排序。
5)基数排序
它是一种稳定的排序算法,但有一定的局限性:
1、关键字可分解。
2、记录的关键字位数较少,如果密集更好
3、如果是数字时,最好是无符号的,否则将增加相应的映射复杂度,可先将其正负分开排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值