有人可以告诉我为什么我在排序后得到垃圾值吗? 最初的调用是(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