分治-归并排序

1. 基本思想

"分治-归并排序"是一种经典的排序算法,利用分治法的思想将一个大的问题拆解成多个小问题,再合并求解的过程。具体过程如下:

  1. 分解将待排序的数组不断分成两半递归地对每个子数组进行归并排序,直到每个子数组只包含一个元素(即已经有序)。

  2. 合并:将两个有序的子数组合并成一个有序的大数组。合并过程是归并排序的核心,它确保在合并时保持数组的有序性。

  3. 递归:继续递归处理子数组,直到所有子数组都已排序并合并成一个完整的有序数组。

归并排序的时间复杂度为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 的起始位置。

比较左右区间的元素

    - 如果左区间的当前元素小于等于右区间的当前元素,将左区间的元素加入 tmp,并移动左指针。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值