#include <stdio.h>
#include <stdlib.h>
//将有二个有序数列a[first...mid]和a[mid...last]合并。
void mergeArray(int a[], int c[],int left,int mid,int right)
{
int i, j;
j=mid+1;
i=left;
int m=mid;
int n=right;
int k=0;
while (i <= m && j<= n)
{
if (a[i] <= a[j])
c[k++] = a[i++];
else
c[k++] = a[j++];
}
while(i <= m)
c[k++]=a[i++];
while (j <= n)
c[k++] = a[j++];
for(i=0; i<k; i++)
a[left+i]=c[i];
}
void mergesort(int a[],int p[],int left,int right)
{
int center;
if(left<right)
{
center=(left+right)/2;
mergesort(a,p,left,center);
mergesort(a,p,center+1,right);
mergeArray(a, p,left, center, right);
}
}
void MergeSort(int a[],int n)
{
int *p;
p=malloc(n*sizeof(int));
if(p==NULL)
return;
mergesort(a,p,0,n-1);
free(p);
return;
}
int main(int argc, char *argv[])
{
int a[13]= {2,4,70,97,127,304,67,77,81,83,99,10,209};
int b[6]= {1,2,5,7,9,11};
int c[19];
int i;
MergeSort(a,13);
for(i=0; i<13; i++)
{
printf("%d ",a[i]);
}
printf("\n");
system("PAUSE");
return 0;
}
引用
http://blog.youkuaiyun.com/morewindows/article/details/6678165