归并排序思路整理

相对来说,归并排序的思路还是比较简单的,就是一个划分和合并的过程,相对应的思路就直接在代码中注释了

代码:

//归并排序: 
//合并:
void merge(int *arr,int low1,int high1,int low2,int high2){
	//使用a1,a2两个数组分别记录arr拆分的前后两段:
	int n1=high1-low1+1;
    int n2=high2-low2+1;
	int a1[n1],a2[n2];
	for(int i=0;i<n1;i++)
	    a1[i]=arr[i+low1];
	for(int i=0;i<n2;i++)
	    a2[i]=arr[i+low2];
	//使用i,j,k分别记录a1,a2,arr下标:
	int i=0,j=0,k=low1;
	while(i<n1&&j<n2){
		if(a1[i]<a2[j])arr[k++]=a1[i++];//相当于arr[k]=a1[i];i++;k++;
	    else
		    arr[k++]=a2[j++]; 
	}
	//当a1或a2中还有数字未排序进入arr,使用while语句将剩余数据导入:
	while(i<n1)arr[k++]=a1[i++];
	while(j<n2)arr[k++]=a2[j++]; 
} 
 
void mergeSort(int *arr,int low,int high){
	if(low>=high)
	    return;
	int mid=low+(high-low)/2;
	//拆分为前后两个序列: 
	mergeSort(arr,low,mid);
    mergeSort(arr,mid+1,high);
	merge(arr,low,mid,mid+1,high);//合并
} 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值