ソート後にガベージ値が表示される理由を教えてもらえますか? 最初の呼び出しは(A,0,n)
です。ここで、n
は配列のサイズですか?私はマージソートアルゴリズムを使用して配列をソートしたいが、センチネル値は使用しない。Merge_sort without sentinel
void merge_sort(int A[], int l, int mid, int r)
{
int n1 = mid - l + 1;
int n2 = r - mid;
int L[n1], R[n2];
for (int i = 0; i < n1; i++)
{
L[i] = A[i];
}
for (int i = 0; i <= n2; i++)
{
R[i] = A[i + mid + 1];
}
cout << endl;
int j = 0, k = 0;
for (int i = l; i < r; i++)
{
if (j == n1 || k == n2)
{
if (j == n1 + 1)
{
A[i] = R[k];
k++;
}
else
{
A[i] = L[j];
j++;
}
}
else if (L[j] >= R[k])
{
A[i] = L[j];
j++;
}
else
{
A[i] = R[k];
k++;
}
}
}
void merge_divide(int A[], int l, int r)
{
if (l < r)
{
int mid = (l + r)/2;
merge_divide(A, l, mid);
merge_divide(A, mid + 1, r);
merge_sort(A, l, mid, r);
}
}
最初は、あなたが技術的にC++言語の一部ではない[可変長配列(https://en.wikipedia.org/wiki/Variable-length_array)を使用することです。しかし、コンパイラの中には、それらをポータブルではない拡張機能として言語に追加するものもあります。代わりに['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)を使うことをお勧めします。 –
開発者になりたい場合は、プログラムをブラックボックスにすることはできません。つまり、デバッガを使用してコードをステップバイステップで実行します。どのようなvar値とあなたが期待するものと比較します。 – Ripi2
ランダムな 'cout << endl;'とは何ですか? – KABoissonneault