void Merge(int data[], int low, int mid, int high) /* 归并两个有序数组 */ { int i = low, k = 0; /* 从i=low和j=mid+1处归并两个有序数组 */ int j = mid + 1; int *tmp = (int *)malloc((high - low + 1) * sizeof(int)); /* 申请一个与需要归并的长度相同的数组 */ while(i <= mid && j <= high) /* 归并 */ { if(data[i] <= data[j]) tmp[k++] = data[i++]; else tmp[k++] = data[j++]; } while(i <= mid) /* 如果归并后前一个数组还有剩余元素则全部赋予归并数组 */ tmp[k++] = data[i++]; while(j <= high) /* 如果归并后后一个数组还有剩余元素则全部赋予归并数组 */ tmp[k++] = data[j++]; i = low; k = 0; /* 把临时数组的内容复制到原数组的相应位置 */ for(; i <= high; ) data[i++] = tmp[k++]; free(tmp); /* 释放申请的临时数组空间 */ } void MergeSort(int data[], int low, int high) { if(low == high) return; int mid = (low + high) / 2; MergeSort(data, low, mid); MergeSort(data, mid + 1, high); Merge(data, low, mid, high); }