public static void mergeSort(int[] array) {
if (array == null || array.length <= 1)
return;
sort(array, 0, array.length - 1);
private static void sort(int[] array, int left, int right) {
if (left == right)
return;
int mid = left + ((right - left) >> 1);
// 对左侧子序列进行递归排序
sort(array, left, mid);
// 对右侧子序列进行递归排序
sort(array, mid + 1, right);
// 合并
merge(array, left, mid, right);
}
private static void merge(int[] array, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int i = 0;
int p1 = left;
int p2 = mid + 1;
// 比较左右两部分的元素,哪个小,把那个元素填入temp中
while (p1 <= mid && p2 <= right)
temp[i++] = array[p1] < array[p2] ? array[p1++] : array[p2++];
// 上面的循环退出后,把剩余的元素依次填入到temp中
// 以下两个while只有一个会执行
while (p1 <= mid)
temp[i++] = array[p1++];
while (p2 <= right)
temp[i++] = array[p2++];
// 把最终的排序的结果复制给原数组
for (i = 0; i < temp.length; i++)
array[left + i] = temp[i];
}
归并排序代码
最新推荐文章于 2022-04-19 18:55:41 发布
本文详细介绍了归并排序的原理与实现过程,包括如何将数组分为左右两部分进行递归排序,以及如何合并已排序的部分。通过递归调用`sort`函数和`merge`函数,实现了从分治策略到最终排序的完整步骤。代码中展示了如何创建临时数组存储排序结果,并在最后将排序后的结果复制回原数组。
摘要由CSDN通过智能技术生成