
归并排序的核心思想是分治:将数组不断分割成更小的子数组,直到每个子数组只包含一个元素(此时已排序),然后逐步合并这些子数组,在合并过程中完成排序。排序发生在合并阶段,而非分割阶段。
图解归并排序
首先,我们有一个待排序的数组:

将其分成两个子数组:

继续递归分割,直到每个子数组只有一个元素:

接下来是合并和排序阶段,每次合并两个已排序的子数组,得到一个新的已排序的数组:

最终得到完全排序的数组:

Java代码实现及优化
初始代码存在效率问题,主要体现在数组元素的复制和合并逻辑上。以下提供优化后的代码:
<code class="java">import java.util.Arrays;
public static void mergeSort(int[] array) {
int n = array.length;
if (n < 2) {
return; // 数组长度小于2,无需排序
}
int middle = n / 2;
int[] left = Arrays.copyOfRange(array, 0, middle);
int[] right = Arrays.copyOfRange(array, middle, n);
mergeSort(left);
mergeSort(right);
int i = 0, j = 0, k = 0;
while (i < left.length && j < right.length) {
if (left[i] <= right[j]) {
array[k++] = left[i++];
} else {
array[k++] = right[j++];
}
}
while (i < left.length) {
array[k++] = left[i++];
}
while (j < right.length) {
array[k++] = right[j++];
}
}</code>此优化版本使用Arrays.copyOfRange()高效地复制数组,并简化了合并过程中的比较和赋值逻辑,提高了代码的可读性和效率。
祝您学习愉快!
以上就是归并排序算法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号