疑似コードからアルゴリズムを実装する際に 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 つの問題を解決してくれれば、おそらくうまくいくでしょう。