归并排序
private static void MergeSort(int[] arr, int begin, int end) {
if (begin < end) {
int mid = (end - begin) / 2 + begin;
MergeSort(arr, begin, mid);
MergeSort(arr, mid + 1, end);
Merge(arr, begin, end, mid);
}
}
private static void Merge(int[] arr, int begin, int end, int mid) {
int[] result = new int[end - begin + 1];
int i = begin;
int j = mid + 1;
int index = 0;
while (i <= mid && j <= end) {
if (arr[i] >= arr[j]) {
result[index++] = arr[j++];
} else {
result[index++] = arr[i++];
}
}
while (i <= mid) {
result[index++] = arr[i++];
}
while (j <= end) {
result[index++] = arr[j++];
}
index = 0;
while(begin <= end){
arr[begin++] = result[index++];
}
}