排序问题——归并&&基数排序
归并排序
基本思想:将两个或者两个以上的有序子序列“归并”为一个有序序列。
- 在内部排序中,通常采用2-路归并排序
- 如{48,34,60,80,75,12,26,48}
- 倒着排序的树,归并树,如下
- 总共多少趟,归并树的高度
关键问题:如何将两个有序序列合成一个有序序列?
顺序表存储时,将两个有序表中两两比较,满足条件元素放入新的顺序表中,就合成为一个有序序列了。
小结:
- 需要一个额外的数组
- 稳定性:稳定
- O(n*log n)
基数排序
基本思想:分配 & 收集;也叫做桶排序或箱排序
设置若干个箱子,将关键字为k的记录放入第k个箱子,然后在按序号将非空的链接。
基数排序:数字是由范围的,均由0-9这十个数字组成,则只需设置十个箱子,相继按个、十、百…进行排序。
eg:比如 若干个三位数
第一趟按照个位数大小,就扔进哪个箱子。
第二趟按照十位数大小,就扔进哪个箱子。
第三趟按照百位数大小,就扔进哪个箱子。
此时,已经有序;排序结束。
PS:不能从百位开始
小结:
- 适合多关键字排序。
- 稳定性:稳定
排序类大总结
- 当待排记录序列按关键字顺序有序时,直接插入排序和冒泡排序能达到O(n)的时间复杂度;对于**快速排序(越乱越好)**而言,这个是最不好的情况,此时应该避免。
- 简单选择排序、堆排序、归并排序 的时间性能不随着记录序列中关键字的分布而改变。均差不多。
- 空间性能:指的是排序过程中所需的辅助空间大小:
- 稳定的排序方法:对于两个关键字相等的记录。他们在序列中相对位置,在排序前后,没有改变位置。
- 快排和堆排序(PS:简单选择排序也有不稳定情况,但书中给的是稳定)是不稳定的排序方法。
- 可以使用一颗判定树,来描述这类基于“比较关键字”进行排序的排序方法。