C++ 및 알고리즘에 익숙하지 않습니다. 필자가 작성한 병합 정렬 알고리즘에서 혼란 스럽습니다. 나는 오류가 없을 때 코드가 정답을 얻지 못하는 이유를 모른다. 코드에서 입력 한 5 개의 숫자를 정렬하고 싶습니다. 정렬 된 배열은 화면에 인쇄되지 않습니다. 내 코드에서 문제를 알고 싶다. 고마워.My Merge Sort 알고리즘에 올바른 대답이 없습니다.
#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는 어떤 입력이 당신에게 잘못된 대답을주고 있는지 말할 수 있습니까 ?? 코드가 내 시스템에서 잘 작동하는 것 같습니다 ..! –
일부 코드가 오류없이 컴파일러를 통과했기 때문에 올바른 것이란 것은 아닙니다. * 정의되지 않은 동작 * 또는 다른 * 논리 오류 *에 대한 가능성은 많이 있습니다. 무엇보다 먼저 경고를 켜야하며 오류가있는 것처럼 수정해야합니다. 그런 다음 디버거를 사용하는 방법과 변수를 모니터링하면서 코드를 단계별로 실행하는 방법을 배워야합니다. –