简体   繁体   English

Mergesort实施不正确

[英]Mergesort implementation not correct

I have been trying to write a basic top down mergesort, but the array is not fully sorted after the code has finished executing. 我一直在尝试编写一个基本的自上而下的合并排序,但是在代码完成执行之后,数组未完全排序。 I have tried debugging it but all the recursion makes it tough to pinpoint. 我已经尝试调试它,但是所有递归都很难确定。 I have also tried comparing my code to other examples of mergesort, but I've had no luck finding any differences 我还尝试将我的代码与其他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++];
        }
    }

Change 更改

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

to

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

note aux[ x ] 注意aux [ x ]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM