Я пытаюсь написать функцию сортировки слиянием в C ++, однако я получаю сообщение об ошибке (в функции MergeSort):
A = MergeSort (A, x);
B = MergeSort (B, y);
C = Merge(A,B,x,y);
как недопустимое преобразование из int в int *. Что я делаю неправильно? Любая помощь будет оценена! Благодарю.
Вот мой код функции:
int MergeSort (int [], int);
int Merge (int [], int [], int, int);int MergeSort (int arr[], int len) {
int x = len/2;
int y = len-x;
int i,j;
// initialize the arrays
int * A = new int [x];
int * B = new int [y];
int * C = new int [len];
// copy left and right arrays
for (i=0, j=0; i<x; i++, j++) {
A[i] = arr[j];
}
for (i=0; i<y; i++, j++) {
B[i] = arr[j];
}
A = MergeSort (A, x);
B = MergeSort (B, y);
C = Merge(A,B,x,y);
return C;
}
int Merge(int A[], int B[], int x, int y) {
int i,j,k;
i = 0; j = 0; k = 0;
int * C = new int[x+y];
while (i < x && j < y) {
if (A[i] < B[j])
C[k++] = A[i++];
else
C[k++] = B[j++];
}
if (i < x) //A is longer
C[k++] = A[i++];
if (j < y) //B is longer
C[k++] = B[j++];
return C;
}
И вот моя основная функция:
int main() {
//initialize array with some values
int ar [8] = {7, 5, 9, 1, 4, 22, 11, 10};
cout<<"array:";
for (int i=0;i<8;i++)
cout<<ar[i];
cout<<endl;
//run merge sort
ar = MergeSort(ar,8);
cout<<"merged array:";
for (int i=0;i<8;i++)
cout<<arr[i];
cout<<endl;
return 0;
}
Что ж, C
объявлен как int*
и вернулся как int
а не как int*
, Конечно, ваша программа полна утечек памяти, поскольку вы выделяете память в нескольких местах, но никогда не освобождаете ее. Возможно, вы захотите взглянуть на std::vector<int>
представлять ваши массивы.
Кроме того, в main()
Функция, которую вы пытаетесь назначить int
для массива: вы вообще не можете назначать входные массивы, вы можете назначать только отдельным элементам. С помощью std::vector<int>
Я бы тоже избежал этой проблемы.
Других решений пока нет …