#include "stdio.h"
#include<malloc.h>
//归并排序;把src数组分成两部分有序的,然后合并。
void merg(int src[],int start,int mid,int end,int temp[]){
int i=start,m=mid;
int j=mid+1,e=end;
int k=0;
while(i<=mid&&j<=e){
if(src[i]<=src[j]){
temp[k++]=src[i++];
}else{
temp[k++]=src[j++];
}
}
while(i<=m){
temp[k++]=src[i++];
}
while(j<=e){
temp[k++]=src[j++];
}
for (i = 0; i < k; i++) //最终src就是排列后的,
src[start + i] = temp[i];
}
void mergesort(int a[], int first, int last, int temp[])
{ int mid ;
if (first <last)
{
mid= (first + last) / 2;
mergesort(a, first, mid, temp); //左边有序
mergesort(a, mid + 1, last, temp); //右边有序
merg(a, first, mid, last, temp); //再将二个有序数列合并
}
}
int MergeSort(int a[], int n)
{
int *p = (int*)malloc(n*sizeof(int));
if (p == NULL)
return -1;
mergesort(a, 0, n - 1, p);
free(p);
return 0;
}
void main()
{
unsigned int sort[]={5099999,19992,9990,32,20,2999990,80,900991,20};//0-6;7-13
unsigned int dest[9]={0};
int a;
MergeSort(sort,9);
for(a=0;a<9;a++)
{
printf("dest[%d]=%d\n",a,sort[a]);
}
}
dest[0]=20
dest[1]=20
dest[2]=32
dest[3]=80
dest[4]=9990
dest[5]=19992
dest[6]=900991
dest[7]=2999990
dest[8]=5099999
Press any key to continue