归并排序理解

/*归并排序*/
//首先做一个两个有序数组合并的函数
//将有序数组a[]和b[]合并到c[]中
void MemeryArray(int a[], int n, int b[], int m, int c[])
{
 int i, j, k;
 i = j = k = 0;
 while (i < n && j < m)
 {
  if (a[i] < b[j])
   c[k++] = a[i++];
  else
   c[k++] = b[j++];
 }
 while (i < n)
  c[k++] = a[i++];
 while (j < m)
  c[k++] = b[j++];
}//此函数仅作理解
//实际做一个函数合并a的前一半和后一半
void mergearray(int a[],int begin,int mid,int end,int temp[]){
//这里的end传入实际数组最大下标即n-1
 int i=begin;
 int j=mid+1;
 int k=0;
 while(i<=mid&&j<=end){
  if(a[i]<=a[j]){
   temp[k++]=a[i++];
  }else{
   temp[k++]=a[j++];
  }
 }
 while(i<=mid){
  temp[k++]=a[i++];
 }
 while(j<=end){
  temp[k++]=a[j++];
 }
 for(i=0;i<k;i++){
  a[begin+i]=temp[i];
 }
}
void merge_sort(int arr[],int begin,int end,int temp[]){
 if(begin<end){
  int mid=(begin+end>>1);
  merge_sort(arr,begin,mid,temp);
  merge_sort(arr,mid+1,end,temp);
  mergearray(arr,begin,mid,end,temp);
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值