Ok, так что я пытаюсь осуществить слияние своего рода в Java, но я бегу в следующее сообщение об ошибке при расщеплении массива:Merge
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);
}
}
EDIT Хорошо, так что я проверил другой сайт и Javadoc на copyOfRange
метод, требующий следующее:
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
Пожалуйста, помогите мне исправить эту проблему ... :(
Нет необходимости делать копии массива. Просто передайте массив с новыми индексами lo/mid/high. – Sridhar