归并排序,稳定
void Merge(int *arr, int left, int mid, int right, int *buf)
{
int i = left;
int j = mid+1;
int k = 0;
//将两组数据按顺序填入buf
while(i<=mid && j<=right)
{
if(arr[i] <= arr[j])
buf[k++] = arr[i++];
else
buf[k++] = arr[j++];
}
//将剩余的数据填入buf
while(i <= mid)
buf[k++] = arr[i++];
while(j <= right)
buf[k++] = arr[j++];
k = 0;
//将数据拷贝回原数组
while(left <= right)
arr[left++] = buf[k++];
}
void MergeSort(int *arr, int left, int right, int *buf)
{
int mid;
if(left < right)
{
mid = (left+right)/2;
MergeSort(arr, left, mid, buf);
MergeSort(arr, mid+1, right, buf);
Merge(arr, left, mid, right, buf);
}
}