好的,所以我尝试在java中实现合并排序,但是在数组的分割中遇到以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: 2 > 1
at java.util.Arrays.copyOfRange(Arrays.java:3591)
at MergeSortS.recMergeSort(MergeSortS.java:26)
at MergeSortS.recMergeSort(MergeSortS.java:28)
at MergeSortS.mergeSort(MergeSortS.java:17)
at MergeSortM.main(MergeSortM.java:16)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
我的代码段如下,请帮我确定我的问题...:(
我特意在最后注释掉了 recMergeSort(right)
递归调用,因为我想更正 recMergeSort(left)
调用...
public void recMergeSort(int[] tempArray){
if(tempArray.length>1){
int mid=(tempArray.length)/2;
int[] left=Arrays.copyOfRange(tempArray,0,mid);
int[] right=Arrays.copyOfRange(tempArray,mid+1,tempArray.length-1);
recMergeSort(left);
//recMergeSort(array, right, mid+1, right.length-1);
}
}
编辑
好的,所以我检查了另一个网站和 copyOfRange
方法上的 javadoc,需要以下内容:
Parameters:
original - the array from which a range is to be copied
from - the initial index of the range to be copied, **inclusive**
to - the final index of the range to be copied, **exclusive**. (This index may lie outside the array.)
按如下方式修复此问题后:
public void recMergeSort(int[] tempArray){
if(tempArray.length>1){
int mid=(tempArray.length)/2;
int[] left=Arrays.copyOfRange(tempArray,0,mid+1);
int[] right=Arrays.copyOfRange(tempArray,mid+1,tempArray.length);
recMergeSort(left);
//recMergeSort(array, right, mid+1, right.length-1);
}
}
我收到以下错误:
Exception in thread "main" java.lang.StackOverflowError
请帮我纠正这个问题...:(
最佳答案
您似乎陷入了 Arrays.copyOfRange()
方法的困境。请尝试使用以下代码:
public void recMergeSort(int[] tempArray){
if (tempArray.length > 1 ){
int mid=(tempArray.length)/2; // mid = 2
int[] left = Arrays.copyOfRange(tempArray, 0, mid); // [10, 20]
int[] right = Arrays.copyOfRange(tempArray, mid, tempArray.length); // [30, 40, 50]
recMergeSort(left);
//recMergeSort(array, right, mid+1, right.length-1);
}
}
Arrays.copyOfRange(array, lowIndex, highIndex)
将从 lowIndex
inclusive 和 highIndex
复制访问> 独家。这意味着左侧副本的 highIndex
应与右侧副本的 lowIndex
相同。
用法:
int[] tempArray = new int[] {10, 20, 30, 40, 50};
recMergeSory(tempArray);
关于java - 归并排序java实现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31019683/