Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 Mergesort实现不正确_Java_Algorithm_Sorting_Debugging_Mergesort - Fatal编程技术网

Java Mergesort实现不正确

Java Mergesort实现不正确,java,algorithm,sorting,debugging,mergesort,Java,Algorithm,Sorting,Debugging,Mergesort,我一直在尝试编写一个基本的自顶向下的mergesort,但在代码执行完毕后,数组并没有完全排序。我已经试过调试它,但是所有的递归使得它很难精确定位。我还尝试将我的代码与其他mergesort示例进行比较,但没有发现任何差异 private void mergeSort(int[] arr) { int[] aux = new int[arr.length]; sort(arr, aux, 0, arr.length - 1); } pri

我一直在尝试编写一个基本的自顶向下的mergesort,但在代码执行完毕后,数组并没有完全排序。我已经试过调试它,但是所有的递归使得它很难精确定位。我还尝试将我的代码与其他mergesort示例进行比较,但没有发现任何差异

    private void mergeSort(int[] arr) {
        int[] aux = new int[arr.length];
        sort(arr, aux, 0, arr.length - 1);
    }

    private void sort(int[] arr, int[] aux, int lo, int hi) {
        if(hi <= lo)
            return;
        int mid = lo + ((hi - lo) / 2);
        sort(arr, aux, lo, mid);
        sort(arr, aux, mid + 1, hi);
        merge(arr, aux, lo, mid, hi);
    }

    private void merge(int[] arr, int[] aux, int lo, int mid, int hi) {
        for(int i  = lo;i <= hi;i++)
            aux[i] = arr[i];

        int x = lo;
        int y = mid + 1;
        for(int i = lo; i <= hi; i++){
            if(x > mid)              arr[i] = aux[y++];
            else if(y > hi)          arr[i] = aux[x++];
            else if(aux[y] < aux[i]) arr[i] = aux[y++];
            else                     arr[i] = aux[x++];
        }
    }
private void合并排序(int[]arr){
int[]aux=新int[arr.length];
排序(arr,aux,0,arr.length-1);
}
私有无效排序(int[]arr,int[]aux,int lo,int hi){
如果(hi改变

else如果(aux[y]

else如果(aux[y]
注意辅助[x]

更改

  else if(aux[y] < aux[i]) arr[i] = aux[y++];
else如果(aux[y]

else如果(aux[y]
注释aux[x]

  else if(aux[y] < aux[x]) arr[i] = aux[y++];