1.基本思想
分治-归并排序是一种经典的排序算法,利用分治法的思想将一个大的问题拆解成多个小问题,再合并求解的过程。具体过程如下:
- 分解:将待排序的数组不断分成两半,递归地对每个子数组进行归并排序,直到每个子数组只包含一个元素(即已经有序)。
- 合并:将两个有序的子数组合并成一个有序的大数组。合并过程是归并排序的核心,它确保在合并时保持数组的有序性。
- 递归:继续递归处理子数组,直到所有子数组都已排序并合并成一个完整的有序数组。
归并排序的时间复杂度为O(n log n),由于需要额外的空间来存储临时数组,因此空间复杂度为O(n)。它是一种稳定的排序算法,适用于大规模数据的排序。
2.排序数组(中等)


tmp:用于在合并阶段存储排序后的中间结果。
递归基:
- if (l >= r):当左边界 l 大于或等于右边界 r 时,说明区间长度为 1 或 0,此时区间本身有序,不需要进一步处理。
划分区间:
- int mid = (l + r) >> 1:通过计算中间点 mid,将当前区间 [l, r] 分为两部分:
- 左区间 [l, mid]
- 右区间 [mid + 1, r]
合并两个有序区间:
- int left = l, right = mid + 1, i = 0:初始化三个指针:
- left 指向左区间的起始位置。
- right 指向右区间的起始位置。
- i 指向临时数组 tmp 的起始位置。
比较左右区间的元素:
- 如果左区间的当前元素小于等于右区间的当前元素,将左区间的元素加入

最低0.47元/天 解锁文章
953

被折叠的 条评论
为什么被折叠?



