0

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;
}
4

1 に答える 1

2

として宣言Cされ、としてではなくとしてint*返されます。もちろん、複数の場所にメモリを割り当てても解放しないため、プログラムはメモリリークでいっぱいです。配列を表すために見てみたいと思うかもしれません。intint*std::vector<int>

また、を配列main()に割り当てようとする関数ではint、buiLt-in配列に割り当てることはできず、個々の要素にのみ割り当てることができます。を使用std::vector<int>すると、この問題も回避できます。

于 2012-10-13T18:02:46.593 に答える