本篇简单讲述一下归并排序以及时间复杂度
- 归并排序思想
- 代码实现
- 过程分析
- 时间复杂度和空间复杂
归并排序
归并排序(Merging Sort)就是将两个或者两个以上的有序表合并成一个有序表的过程。将两个有序表合并成一个有序表的过程2-路归并
归并排序算法的思想是:
假设初始序列含有n个记录,则可看成n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的子序列;再两两归并, ….., 如此重复,直至得到一个长度为n的有序序列为止。
代码实现
1 | public class MergeSort { |
动画演示
图片来源:https://mp.weixin.qq.com/s/vn3KiV-ez79FmbZ36SX9lg
merge过程:
1 | while (p1 <= m) { |
时间复杂度
当有n个记录时,需进行$\lceil log_2n \rceil$躺归并排序,其关键字比较次数不超过n,元素移动次数都是n,因此,归并排序的时间复杂度为$O(nlog_2n)$。
空间复杂度
用顺序表实现归并排序时,需要和待排序记录个数相等的辅助存储空间,所以空间复杂度为O(n)。
特点
归并排序是一种稳定的排序