сортировка — сортировка слиянием в C ++: невозможно передать массив в функцию слияния — недопустимое преобразование в ‘int *’

Я пытаюсь написать функцию сортировки слиянием в 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;
}

0

Решение

Что ж, C объявлен как int* и вернулся как int а не как int*, Конечно, ваша программа полна утечек памяти, поскольку вы выделяете память в нескольких местах, но никогда не освобождаете ее. Возможно, вы захотите взглянуть на std::vector<int> представлять ваши массивы.

Кроме того, в main() Функция, которую вы пытаетесь назначить int для массива: вы вообще не можете назначать входные массивы, вы можете назначать только отдельным элементам. С помощью std::vector<int> Я бы тоже избежал этой проблемы.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]