【问题标题】:Mergesort implementation not correct合并排序实现不正确
【发布时间】:2016-01-21 06:28:00
【问题描述】:

我一直在尝试编写一个基本的自上而下的归并排序,但是在代码执行完成后数组没有完全排序。我试过调试它,但所有的递归都很难确定。我也尝试将我的代码与其他合并排序示例进行比较,但我没有找到任何差异

    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++];
        }
    }

【问题讨论】:

    标签: java algorithm sorting debugging mergesort


    【解决方案1】:

    改变

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

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

    注意辅助[x]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 2013-08-11
      相关资源
      最近更新 更多