-2
我的程序有問題。它適用於較少數量的參數,但例如對於輸入13 5 10 8 6 22 11 3 12 20 7 9 14 17 19 1 2 18
它返回1,3,5,6,7,8,9,10,11,12,13,14,17,19,20,22,2,18,
。我真的不知道什麼可能是錯的。合併排序 - 程序不檢查兩個最後的位置。
功能
void mergeSort(int arr[], int arrSort[], int first, int mid, int last) {
int from = first;
int to = mid;
for (int i = first; i<last; i++) {
if ((arr[from] <= arr[to] && from<mid) || to >= last) {
arrSort[i] = arr[from];
from++;
} else if ((arr[to]<arr[from] && to<last) || from >= mid) {
arrSort[i] = arr[to];
to++;
}
}
for (int i = first; i<last; i++)
arr[i] = arrSort[i];
}
void mergeSortIter(int array[], int size) {
int *a = new int[size];
for (int i = 1; i <= size; i *= 2) {
showArray(array, size);
for (int j = i; j <= size; j += (2 * i))
mergeSort(array, a, j - i, j, min((j + i), size));
}
}
其餘部分的代碼
把所有相關的代碼放在這裏。如果它是很多代碼,只要它是最少量的再現就沒問題。 – AndyG
您正在索引數組之外,導致未定義的行爲。找出在哪裏作爲練習。 (在'mergeSort'中插入一些跟蹤輸出。) – molbdnilo
**當你得到這個工作**。獲得代碼審查是一個好主意。 https://codereview.stackexchange.com –