【数据结构】八大排序——归并排序,基数排序

归并排序:

归并排序是开始将待排序列的每一个数看成一组,进行一 一合并,然后进行二二,四四等合并。

呈2的倍数递增,到2的倍数大于待排序列时停止。

比如 一组待排序列  5  6   7   2   15   4   14   9   3   10

第一次进行一 一合并 ,把每一个数看成一组稳定序列 , 合并完 5 6   2 7   4 15    9 14    3 10

然后进行二二合并 , 2 5 6 7     4 9 14 15      3 10

然后进行四四   2 4 5 6 7 9 14 15    3 10

最后是八八合并  2 3 4 5 6 7 9 10 14 15

因为在递增到16已经超过了待排数列的长度 ,所以到这停止 。

代码的思想是  让L1  在第一组第一个 ,H1 在第一组 最后一个  , L2 在第二组第一个 H2在第二组最后一个 , 两组合并完后 下标移动到下两组进行比较。 申请一个数组 在每次比较完后将数据先存到这个数组里 。

//根据传递进来的gap进行几几合并
static void Merge(int *arr, int len, int gap)
{
	//因为数据本身空间不够用  所以一进来申请一个和数组等长的动态内存
	int *brr = (int *)malloc(sizeof(int) * len);
	assert(brr != NULL);


	int L1 = 0;
	int H1 = L1+gap-1;
	int L2 = H1+1;
	int H2 = L2+gap-1 < len ? L2+gap-1 : len-1;
	int i = 0;//i代表brr的下标

	while (L2 < len)  // 确定最少有两个组 
	{
		while
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值