マージソートアルゴリズムを使用してリストをソートするプログラムを作成しました。
問題は、動作するはずだと思うのですが、動作していないことです。マージ関数は、パラメーターとして送信された配列を返します。私が書いたコードを見て、何が間違っているのか、どのように改善できるのか教えてください。
ありがとう
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