归并排序
/* merge numbers in two array */
/* the two array have been sorted */
/* called by mergesort() */
void merges(int data[],int head,int mid,int tail)
{
int header=head,latter=mid+1;int ii=0;
/* array for store merge nums */
int mergenum[tail-head+1]={0};
/* merge two part of numbers into one array */
/* two parts are [header,mid] and [mid+1,latter]*/
while(header<=mid&&latter<=tail){
if(data[header]<data[latter])
mergenum[ii++] = data[header++];
else
mergenum[ii++] = data[latter++];
}
/*merge numbers be left*/
while(header<=mid)
mergenum[ii++] = data[header++];
while(latter<=tail)
mergenum[ii++] = data[latter++];
/* copy numbers in mergenum[] to data[](where they comes from) */
ii=0;
for(int j=head;j<=tail;j++)
data[j] = mergenum[ii++];
}
/* mergesort */
/* give the order of this algorithm */
void mergesort(int data[],int head,int tail)
{
/*if more the one elem*/
if(tail>head){
/* devide into two parts */
int mid = (tail+head)/2;
/* sort independently*/
mergesort(data,head,mid);
mergesort(data,mid+1,tail);
/* merge two parts */
merges(data,head,mid,tail);
}
}