归并排序

来源:互联网 发布:最新网络歌曲2017 编辑:程序博客网 时间:2024/06/07 03:36

排序过程:



#define INF 9999999void merge(int *L,int low,int mid,int high){int n1,n2,i;int *Left,*Right;n1=mid-low+1;//前半段数量。+1是因为前半段是包括mid的!n2=high-mid;  //后半段数量Left=(int *)malloc(n1*sizeof(int));  //前半段数组创建  Right=(int *)malloc(n2*sizeof(int));  //后半段数组创建for(i=0;i<n1;i++)     //前半段赋值Left[i]=L[low+i];for(i=0;i<n2;i++)      //后半段赋值Right[i]=L[mid+i+1]; //这是加1是因为后半段不包括mid,所以i=0时,应该是L[mid+1]Left[i]=Right[i]=INF;//设置无穷大边界n1=n2=0;i=low;for(i=low;i<=high;i++){if(Left[n1]<Right[n2])  //谁小把哪谁放进L中L[i]=Left[n1++];else L[i]=Right[n2++];}}void mergesort(int *L,int low,int high){int mid,i;if(low>=high)return;mid=(low+high)/2;mergesort(L,low,mid); //前半段是包括mid的mergesort(L,mid+1,high);  //后半段是不包括mid的,故mid+1//保证前半段和后半段都有序后,即可以归并merge(L,low,mid,high);}


0 0
原创粉丝点击