Java 合并排序算法的问题
合并排序算法不工作。不断获取Java 合并排序算法的问题,java,sorting,merge,indexoutofboundsexception,mergesort,Java,Sorting,Merge,Indexoutofboundsexception,Mergesort,合并排序算法不工作。不断获取索引AutofBoundsError。我相信问题可能是因为没有哨兵。当leftarray和rightarray将自身复制到k时,我需要创建一个循环,其中一个数组的数字不足,从而导致错误。我需要一些帮助来创建这个哨兵 private static void mergeSort(可比您的代码中存在多个问题: 不清楚是否包含或排除索引endIndx。如果排除endIndx,代码会简单得多,对数组排序的初始调用很简单:mergesort(arr,0,arr.length);
索引AutofBoundsError
。我相信问题可能是因为没有哨兵。当leftarray
和rightarray
将自身复制到k
时,我需要创建一个循环,其中一个数组的数字不足,从而导致错误。我需要一些帮助来创建这个哨兵
private static void mergeSort(可比您的代码中存在多个问题:
- 不清楚是否包含或排除索引
endIndx
。如果排除endIndx
,代码会简单得多,对数组排序的初始调用很简单:mergesort(arr,0,arr.length);
mergesort
中的初始测试不正确:不测试数组长度,而应该测试切片是否有多个元素:
if (endIndx - begIndx > 1)
- 数组
left
和right
在mergesort
中未使用
- 不需要在数组
left
和merge
中的right
中分配额外的元素,比较数组索引值和子数组长度要简单得多。这种哨兵式方法容易混淆,不应使用
以下是一个简化版本:
private static void mergeSort(可比性请定义“不工作”。是否有错误?输出不正确?我有一个IndexoutOfbounds错误。至少有一个问题是,在第一种方法中,您使用范围[midRange,items.length]访问正确的数组,而您的正确数组具有索引[0,items.length-midRange]。右数组的循环定义错误。首先,您试图分配给索引right[midIndx]
,而应该分配给right[i-midIndx]
,但不幸的是,这不是唯一的问题