프로그래밍을 처음 사용합니다. 나는 최근에 알고리즘을 연구하기 시작했다. 내 코드는 병합 정렬 절차를 수행해야하지만 올바르게 빌드되었지만 오류가 있습니다. 코드가 입력을 받아 작업을 멈 춥니 다. 인해 무한 재귀 "루프"에 병합 정렬 코드가 잘못되었습니다. 알아낼 수 없습니까?
#include<iostream>
using namespace std;
#define size 10
class mergesort {
public:
mergesort(){}
void merge(int a[]) {
int mid = 5;
if (size < 2) return;
int left[size]; int right[size];
for (int i = 0; i < mid; i++) {
left[i] = a[i];
}
for (int j = mid; j < size-1; j++) {
right[j-mid] = a[j];
}
merge(left);
merge(right);
sort(left, right, a, mid, size-mid);
}
void sort(int left[], int right[], int a[], int L, int R) {
int i = 0; int j = 0; int k = 0;
while (i < L && j < R) {
if (left[i] <= right[j])
{
a[k] = left[i];
k++; i++;
}
else if (right[j] < left[i]) {
a[k] = right[j];
k++; j++;
}
}
while (i < L) {
a[k] = left[i];
k++; i++;
}
while (i < R) {
a[k] = right[j];
k++; j++;
}
}
};
void main() {
mergesort m;
int a[size];
cout << "Enter the elements:" << endl;
for (int i = 0; i < size; i++) {
cin >> a[size];
}
m.merge(a);
}
범인은'cin >> a [크기];''cin >> a [i]; ' –
'int [크기];이어야합니다. int right [size];'이것은 유효하지 않은 C++입니다. 배열 크기는 변수가 아닌 컴파일 시간 표현식이어야합니다. – PaulMcKenzie
@PaulMcKenzie'#define size 10' – Borgleader