
本文详解 java 中对二维 long 数组按第一列元素升序进行归并排序的完整实现,重点修复原代码中因索引偏移错误导致的数组覆盖问题,并提供可直接运行的健壮版本。
本文详解 java 中对二维 long 数组按第一列元素升序进行归并排序的完整实现,重点修复原代码中因索引偏移错误导致的数组覆盖问题,并提供可直接运行的健壮版本。
归并排序是一种经典的分治算法,适用于稳定、高效的自定义排序需求。当对二维数组(如 long[][] arr)按某列(例如第 0 列)排序时,关键在于:所有子数组操作必须严格基于当前递归区间 [s, e] 进行索引偏移计算。原代码中 merge 方法存在两处严重错误:
-
左半部分复制错误:
left[i] = arr[i];忽略了起始偏移s,导致始终从数组开头复制,而非[s, mid]区间; -
右半部分复制及后续填充错误:
right[i] = arr[i + n1];应为arr[mid + 1 + i];更严重的是,最后一段while (j 中误写为arr[k++] = left[j++](应为right[j++]),引发越界与数据错乱。
以下是修正后的完整、可运行代码:
public class MergeSort2D {
public static void mergeSort(long[][] arr, int s, int e) {
if (s <p><strong>注意事项与最佳实践:</strong> </p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill11083" title="Java调试"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20dbae7c507.jpg" alt="Java调试" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill11083" title="Java调试" class="overflowclass">Java调试</a>
<p class="overflowclass">通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。
术语注解
JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议)
remote JVM:远程 Java 虚拟机
step through code:代码单步调试(步入 / 步过 / 步出调试)
inspect variables:变量查看 / 变量检视
stac</p>
</div>
<a rel="nofollow" href="/xiazai/skill11083" title="Java调试" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
- ✅ 始终使用
s + i和mid + 1 + i计算源数组索引,避免硬编码0; - ✅ 使用
而非在比较中可保持排序稳定性(相同首值时相对顺序不变); - ⚠️ 若二维数组列数不固定(如非严格 2 列),建议将列索引作为参数传入
merge方法以增强通用性; - ? 对于生产环境,推荐使用
Arrays.sort(arr, Comparator.comparingLong(a -> a[0])),简洁且经过高度优化;但理解手动归并逻辑对算法能力提升至关重要。
该实现已通过多组边界测试(单元素、逆序、重复首值等),确保逻辑严谨、结果可靠。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










