/**
* 归并排序
*
* @param a
*
*/
public static void mergeSort(int[] a) {
mergeSortA(a, 0, a.length - 1);
}
private static void mergeSortA(int[] a, int begin, int end) {
if (end - begin > 0) {
// 分别排序
int middle = begin + (end - begin) / 2;
mergeSortA(a, begin, middle);
mergeSortA(a, middle + 1, end);
// 合并数组
int[] tmp = new int[end - begin + 1];
int k = 0, n = begin, m = middle + 1;
while (n <= middle && m <= end) {
if (a[n] < a[m]) {
tmp[k++] = a[n++];
} else {
tmp[k++] = a[m++];
}
}
// 处理剩下的
while (n <= middle) {
tmp[k++] = a[n++];
}
while (m <= end) {
tmp[k++] = a[m++];
}
for (int i = 0; i < k; i++) {
a[begin + i] = tmp[i];
}
}
}
归并排序
最新推荐文章于 2024-08-12 19:32:44 发布