老实说,我无法弄清楚我做错了什么。我现在已经在调试器中盯着这个东西几个小时,它似乎正确地将元素复制到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%肯定的问题在上面的代码中。
答案 0 :(得分:0)
上面的代码似乎没有任何问题,我自己使用一些例子进行了检查。确保正确调用sort函数。那是mergeSort(0, array_size-1)