有人可以告訴我爲什麼我在排序後得到垃圾值嗎? 最初的調用是(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);
}
}
我注意到的第一件事是,使用[可變長度數組(https://en.wikipedia.org/wiki/Variable-length_array),其在技術上不是C++語言的一部分。儘管如此,一些編譯器將它們添加爲語言的非可移植擴展。我建議你改用['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。 –
如果你想成爲一名開發人員,程序不能成爲你的黑匣子。換句話說,使用調試器並逐步運行您的代碼。什麼var值和你的預期比較。 – Ripi2
怎麼了隨機'cout << endl;'? – KABoissonneault