自顶向下分治实现的归并算法

归并排序在排序算法中对于较大数组是复杂度低于插入排序等算法,代码中merge为一趟归并,合并两个已排序好的子数组,即将两个待排序数组作比较,依次将较小的数放入新的数组,重复此步骤直到一个子数组为空,然后依次将另一个数组输入到新数组,就完成了一次归并。本代码采用了设立哨兵值来避免子数组为空的情况。每当哨兵值被显露时,他不可能为较小数,除非此时两子数组都已显露哨兵值,但此时排序已经完成。

分治算法的步骤:

分解:将当前区间一分为二,即求分裂点:mid = (low+high)/2;
求解:递归地对两个子区间R[low..mid]和R[mid+1..high]进行归并排序;
组合:将已排序的两个子区间R[low..mid]和R[mid+1..high]归并为一个有序的区间R[low..high]。

递归的终结条件:子区间长度为1(一个记录自然有序)。


merge_sort函数递归调用



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值