目录
1. 归并排序
思想
· 将两个或两个以上的序列归并为一个有序序列
· 在内部排序中,通常使用2-路归并排序
例:
树的深度与归并次数直接有关:
,树的深度应为log2n(向上取整)+1
关键操作:如何合并两个有序序列成为一个有序序列?
思路
将二者的第一位元素相比较,若相同则一起移动到LC;若有大小之分,则将较小的移动到LC。依此顺序,直到任一个表为空,则将非空表内元素统一移动到LC。
细节传送门:
【2月第四周学习记录】数据结构与算法王卓-第二章线性表-线性表,顺序表,链表的合并(带例子)_Finale_R的博客-CSDN博客
性能分析
- 时间复杂度为O(nlog2n),空间复杂度为O(n), 需要一个额外的数组空间;
- 归并排序属于稳定排序。
2. 基数排序
PS:有点hash表的意思了
例:
第一趟:按个位分配,收集(使个位有序)
第二趟:按十位分配,收集(使十位有序)
第三趟:按百位分配,收集(使百位有序)
性能分析
- 时间复杂度为O(k * (n + m)),空间复杂度为O(n + m), k为关键字的个数(执行次数),m为箱子的个数;
- 基数排序属于稳定排序。
- 适用于知道关键字取值范围的情况;如果遇到关键字取值范围不确定,或无限大,则不适用
对不同算法进行时间复杂度的比较,一个有趣的例子:
PS:果然最后登场的是大boss
3. 总结表