我目前正在使用mergeSort。我遇到了一个任务,特别要求我不要使用临时数组来创建mergeSort。所以递归是要走的路。这是我的代码:
更新:按要求发布其余代码。
public class RecursiveMergeSort {
public static void mergeSort(int[] list){
mergeSort(list, 0, list.length - 1);
}
private static void mergeSort(int[] list, int low, int high){
if(low < high){
//recursive call to mergeSort, one for each half
mergeSort(list, low, (high/2));
mergeSort(list, list.length/2, high);
int[] temp = merge(list, low, high);
System.arraycopy(temp, 0, list, low, high - low + 1);
}
}
private static int[] merge(int[] list, int low, int high){
int[] temp = new int[high - low + 1];
int mid = (high/2) + 1;
if(list[low] < list[mid] && mid < list.length){
temp[low] = list[low];
temp[mid] = list[mid];
}
if(list[low] > list[mid] && mid < list.length){
temp[low] = list[mid];
temp[mid] = list[low];
}
low++;
mid++;
return temp;
}
public static void main(String[] args) {
int[] list = {2, 3, 4, 5};
mergeSort(list);
for(int i = 0; i < list.length; i++){
System.out.println(list[i] + " ");
}
}
}
我应该以递归的方式划分并征服它。但是,我陷入无限循环,导致下半部分堆栈溢出(自然)。我完全失去了想出一个温和而顺畅的方式告诉我的方法继续分裂。请记住,我的片段中的if语句应该由我们的老师提供。
低值和高值是方法中传递的数组的最低值和最高值索引。
请指点。