我做了一个程序,使用合并排序算法对列表进行排序。合并排序算法建议
问题是,我认为它应该工作,但它不工作,合并函数返回作为参数发送的数组。你能看看我写的代码,告诉我什么是错的,以及如何改进它。
感谢
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++代码的某个地方做'新',那么其他地方也应该'删除'。否则,如果新的函数在递归函数中,则会耗尽内存。 –