Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 合并排序算法的问题_Java_Sorting_Merge_Indexoutofboundsexception_Mergesort - Fatal编程技术网

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]
,但不幸的是,这不是唯一的问题