我在執行從僞代碼算法獲得兩個錯誤:問題在C++歸併排序實現
我的一個問題是int L[n1+1];
錯誤:必須是一個常數;不能分配恆定的大小0.唯一的方法來運行這個是使大小數字爲10.我可能正在實施錯誤的psuedocode,這就是爲什麼我包含在上面的聲明。這可能是我下一個問題的原因。
我的其他問題是我打印只有一行代碼unsorted。我的打印功能完美無缺,適用於所有分類程序。我相信MERGE函數只運行一次。我在底部發布了排序的輸出。
我有一個數組A的隨機數發生器,從0到RAND_MAX。 初始呼叫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 . . .
如果有人可以只幫助這兩個問題,我更可能會得到它的工作。
'INT Q =地板((P + R)/ 2)點樣所有的錯誤; ''地板'是不必要的。適用於整數的部分是無餘數的部分(小數位「被丟棄」)。 – dyp
如果您可以提供[SSCCE](http://sscce.org),那就太好了。 – dyp
在C++數組中,基於0。所以它們將從L [0-> n]而不是L [1-> n + 1]運行。 –