0

疑似コードからアルゴリズムを実装する際に 2 つのエラーが発生します。

私の問題の 1 つはint L[n1+1];エラーです。定数にする必要があります。定数サイズ 0 を割り当てることはできません。これを実行する唯一の方法は、サイズを 10 のような数値にすることです。疑似コードを間違って実装している可能性があるため、上記のステートメントを含めました。これが私の次の問題の原因かもしれません。

私のもう1つの問題は、ソートされていないコードを1行だけ印刷していることです。私の印刷機能は完璧で、すべての仕分けプログラムで機能します。MERGE 関数は 1 回しか実行されていないと思います。ソートの出力を一番下に掲載しました。

0 から RAND_MAX までの配列 A の乱数ジェネレーターがあります。最初の呼び出しはMERGESORT(A,1,n);

void MERGE(int *A, int p, int q, int r)
{
    int n1 = q-(p+1);
    int n2 = r-q;

  //psuedocode states, let L[1..n1+1] & R[1..n1+1] be new arrays

    int L[n1+1];        
    int R[n2+1];    

    for(int i=1; i<n1;i++)
    {
        L[i]=A[p+(i-1)];
    }
    for(int j=1; j<n2; j++)
    {
        R[j] = A[q+j];
    }
    L[n1+1]=NULL; //sentinel
    R[n2+1]=NULL; //sentinel
    int i=1;
    int j=1;
    for (int k=p; k<r; k++)
    {
        if(L[i]<=R[j])
        {
            A[k]=L[i];
            i=i+1;
        }
        else
        {
            A[k]=R[j];
            j=j+1;
        }
    }
}

void MERGESORT(int *A,int p, int r)
{
    if (p<r)
    {
        int q=floor((p+r)/2);
        MERGESORT(A,p,q);
        MERGESORT(A,q+1,r);
        MERGE(A,p,q,r);
    }
}

int L[10];A[10];の出力は次のとおりです。

Sort:  7474 28268 32506 13774 14411
Press any key to continue . . .

誰かがこの 2 つの問題を解決してくれれば、おそらくうまくいくでしょう。

4

2 に答える 2