无法弄清楚我的合并排序c ++有什么问题

时间:2018-03-19 11:14:26

标签: c++ visual-c++

老实说,我无法弄清楚我做错了什么。我现在已经在调试器中盯着这个东西几个小时,它似乎正确地将元素复制到aux数组,但是出了点问题,我无法弄清楚是什么。程序编译,元素没有正确排序。

 void merge(int lo, int mid, int hi) {
    T* aux = new T[(hi - lo) + 1];
    int i = lo;
    int j = mid + 1;

    for (int k = 0; k <= (hi - lo); k++) {  
        if (i > mid) {                              
            aux[k] = arrayData[j];
            j++;
        }
        else if (j > hi) {                          
            aux[k] = arrayData[i];
            i++;
        }
        else if (arrayData[i] < arrayData[j]) {         
            aux[k] = arrayData[i];
            i++;
        }
        else {                                      
            aux[k] = arrayData[j];
            j++;
        }
    }
    for (i = lo; i <= hi; i++) {
        arrayData[i] = aux[i - lo];
    }
    delete[] aux;
}

void mergeSort(int lo, int hi) {
    if (lo >= hi)
        return;
    int mid = (lo + hi) / 2;

    mergeSort(lo, mid);
    mergeSort((mid + 1), hi);
    merge(lo, mid, hi);
}

T是我在代码中的其他地方建立的模板。至于arrayData,它在我的课堂上都是如此。 arrayData中的元素被移动,由于某种原因而没有正确移动,我100%肯定的问题在上面的代码中。

1 个答案:

答案 0 :(得分:0)

上面的代码似乎没有任何问题,我自己使用一些例子进行了检查。确保正确调用sort函数。那是mergeSort(0, array_size-1)