私はC++とアルゴリズムが初めてです。私が書いたマージソートアルゴリズムでは混乱しています。私はエラーがないときにコードが正解を得ない理由を知らない。コードでは、入力した5つの数字を並べ替える必要があります。ソートされた配列は画面に表示されません。私は自分のコードの問題を知りたい。どうもありがとう。マージソートアルゴリズムが正しい答えを得られない
#include<iostream>
using namespace std;
int merge(int a[], int low, int mid, int high) {
int h = low; int j = mid + 1; int k = low;
int *b = new int[high - low + 1];
while ((h <= mid) && (j <= high)) {
if (a[h] < a[j])
b[k++] = a[h++];
else
b[k++] = a[j++];
}
if (h > mid) {
for (j; j <= high;++j)
b[k++]=a[j];
}
if (j > high) {
for (h; h <= mid; ++h)
b[k++] = a[h];
}
for (int i = low; i <= high; ++i)
a[i] = b[i];
delete []b;
return 0;
}
int MergeSort(int a[], int low, int high) {
if (low < high) {
int mid = (low + high)/2;
MergeSort(a, low, mid);
MergeSort(a, mid + 1, high);
merge(a, low, mid, high);
}
return 0;
}
int main() {
int const n(5);
int a[n];
cout << "Input " << n << " numbers please:";
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
MergeSort(a, 0, n - 1);
for (int i = 0; i <= n - 1; ++i)
cout << a[i] << " ";
cout << endl;
}
コードをデバッグしようとしましたか? – HazemGomaa
@Amierは、あなたが間違った答えを与えている入力を教えてくれますか?コードは私のシステムで正常に動作するようです..! –
ちょうどいくつかのコードがエラーなしでコンパイラを通過しているからといって、正しいものでなければならないわけではありません。 *未定義の動作*または他の*論理エラー*には多くの可能性があります。まず、より多くの警告をオンにして、エラーであるかのように修正してください。次に、デバッガを使用する方法と、変数を監視しながらコードを1行ずつ進める方法を学習する必要があります。 –