我制作了一个使用合并排序算法对列表进行排序的程序。
问题是我认为它应该工作但它不工作,合并函数返回一个作为参数发送的数组。你能不能看看我写的代码,告诉我哪里出了问题,以及如何改进它。
谢谢
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