归并排序

来源:互联网 发布:分水岭分割算法流程图 编辑:程序博客网 时间:2024/06/04 18:51


//a是数组,tmp是缓冲区
void merge(int *a,int left,int mid,int right,int *tmp)
{
 int i=left;
 int j=mid+1;
 int k=0;
 
 while(i<=mid&&j<=right)
 {
  if(a[i]>a[j])
   tmp[k++]=a[j++];
  else(a[i]<a[j])
   tmp[k++]=a[i++];
 }
 
 while(i<=mid)
  tmp[k++]=a[i++];
 
 while(j<=right)
  tmp[k++]=a[j++];
}

void mergesort(int *a,int left,int right,int *tmp)
{
 if(left>=right)
  return ;
 int mid=(left+right)/2;
 mergrsort(a,left,mid,tmp);      //对左边部分进行归并排序
 mergesort(a,mid+1,right,tmp);   //对右边部分进行归并排序
 merge(a,left,mid,right,tmp);    //将两部分数据进行归并
}
//归并排序
int main7()
{
    int a[size]={9,8,3,4,0,7,5,8,2,7,1};
 int len=sizeof(a)/sizeof(a[0]);
 
 int tmp[10];
 mergesort(a,0,len-1,tmp);
 
 printA(a,len);
 return 0;
}

原创粉丝点击