- #include<stdio.h>
- void copy(int a[],int b[],int low,int high);
- void Merge(int a[],int b[],int low,int high);
- void Mergesort(int a[],int low,int high);
- int c[10000];//定义数组,暂存数据;
- void main()
- {
- int a[10000],n,i;
- while(scanf("%d",&n)!=EOF)
- {
- for(i=0;i<n;i++)
- scanf("%d",&a[i]);
- Mergesort(a,0,n-1);
- for(i=0;i<n;i++)
- printf("%d ",a[i]);
- }
- }
- void copy(int a[],int b[],int low,int high)
- {
- int i;
- for(i=low;i<=high;i++)
- a[i]=b[i];
- }
- void Merge(int a[],int b[],int low,int high)
- {
- int k,i,j,mid;//i指向[low mid],j指向[mid+1,high]中的元素;
- mid=(low+high)/2;
- for(i=low,j=mid+1,k=low;i<=mid&&j<=high;k++)
- {
- if(a[i]>a[j])
- b[k]=a[j++];
- else
- {
- if(a[i]<a[j])
- b[k]=a[i++];
- }
- }
- while(i<=mid)
- b[k++]=a[i++];
- while(j<=high)
- b[k++]=a[j++];
- copy(a,b,low,high); //将排好序的b数组复制到a中;
- }
- void Mergesort(int a[],int low,int high)
- {
- int mid=(low+high)/2;
- if(low>=high)
- return;//递归出口,如果low>=high就不用排序了
- else
- {
- Mergesort(a,low,mid); // 将[low,high]划分成[low,mid],[mid+1,high]分别对其排序;
- Mergesort(a,mid+1,high);
- Merge(a,c,low,high); //将[low,mid],[mid+1,high]合并
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/050920135647.html
来源: http://www.codesnippet.cn/detail/050920135647.html