template<class T>
int length(T &arr) {
returnsizeof(arr) / sizeof(arr[0]);
}
归并排序函数
合并两个已经排好序的数组
#include <climits>void merge(int *arr, int l, int m, int r) {
int n1 = m - l + 1;
int n2 = r - m;
int L[n1 + 1], R[n2 + 1];
int k = 0;
for (int i = l; i <= m; i++) {
L[k] = arr[i];
k++;
}
k = 0;
for (int i = m + 1; i <= r; i++) {
R[k] = arr[i];
k++;
}
int i = 0, j = 0;
L[n1] = R[n2] = INT_MAX;
for (int k = l; k <= r; k++) {
arr[k] = L[i] <= R[j] ? L[i++] : R[j++];
}
}
归并排序主函数
void mergeSort(int *arr, int l, int r) {
if (l < r) {
int m = (l + r) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
}
测试函数
void testMergeSort() {
int a[] = {-1, 23, -5, -3, -6, 98, 66, 0, 44, 3, -3};
mergeSort(a, 0, length(a) - 1);
for (int i : a) {
std::cout << i << " ";
}
std::cout << std::endl;
}