我做了一個程序,使用合併排序算法對列表進行排序。合併排序算法建議
問題是,我認爲它應該工作,但它不工作,合併函數返回作爲參數發送的數組。你能看看我寫的代碼,告訴我什麼是錯的,以及如何改進它。
感謝
void merge_sort(int *niz, int low, int medium, int high) {
int *niz2 = new int[high-low];
int bottom = low;
int top = medium + 1;
for (int f1=low; f1<high-low; f1++) {
if (low > medium) {
niz2[f1] = niz[top++];
}
else if (top > high) {
niz2[f1] = niz[bottom++];
}
else if (niz[bottom] < niz[top]) {
niz2[f1] = niz[bottom++];
}
else {
niz2[f1] = niz[top++];
}
}
niz = niz2;
}
void merge(int *niz, int low, int high) {
if (low < high) {
int medium = (high+low)/2;
merge(niz, low, medium);
merge(niz, medium+1, high);
merge_sort(niz, low, medium, high);
}
}
程序的輸出:
3 5 2 3 4 9 5 2 7 10
3 5 2 3 4 9 5 2 7 10
您的命名錯誤。 merge_sort應該被命名爲merge,反之亦然。 –
如果你在C++代碼的某個地方做'新',那麼其他地方也應該'刪除'。否則,如果新的函數在遞歸函數中,則會耗盡內存。 –