归并排序的思想和c语言实现

归并排序思想:
把一个长的待排序的序列拆为两段,mid=(a+b)/2
如果新的一段长度大于一,再拆开直到为一
然后用一个新数组存两段每一个元素较小的一个,
最后再把没存完的一段用循环存在新数组的后面,注意:循环条件不是i!=mid,而是i<=mid,因为i可能大于mid
然后用一个循环把排好的原始一一对应赋值给新的序列(因为每一次的递归都是用第一个数组来排序并赋值给第二组的)
归并排序实现的c代码

void gsort(int a,int b)
{
	if(a==b)return;
	int i=a,k=a,mid=(a+b)/2,j=mid+1;
	gsort(a,mid);gsort(j,b);
	while(i<=mid&&j<=b){
		if(m[i]<=m[j])
			n[k++]=m[i++];
		else{
			n[k++]=m[j++];
		}
	}
	while(i<=mid)
	n[k++]=m[i++];
	while(j<=b)
	n[k++]=m[j++];
	for(int x=a;x<=b;x++)
		m[x]=n[x];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值