递归方法停留在无限循环

时间:2014-03-22 03:19:44

标签: java recursion

我目前正在使用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语句应该由我们的老师提供。

低值和高值是方法中传递的数组的最低值和最高值索引

请指点。

0 个答案:

没有答案