归并排序
归并排序的程序:
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);
//合并
mergeArray(a,first,mid,last,temp);
}
}
void
mergeArray(int a[], int first, int mid, int last, int temp[])
{
int i = first,j = mid+1;
int m = mid, n =last;
int k =0;
while ( i <= m && j <=n)
{
//a[i],a[j]比较放入临时数组temp中
if(a[i] < a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
//将剩余的数据放入数组temp中
while( i <= m)
temp[k++] = a[i++];
while(j <= n)
temp[k++] = a[j++];
for( i = 0; i< k; i++)
a[first + i] = temp[i];
}