嗨,我需要帮助我为hw写这个函数。它不工作,即使它与数组而不是矢量工作正常。有人可以帮忙吗?提前致谢:]。
void quick2 (vector <int> & qlist2, int left, int right) {
int i = left, j = right;
int middle = qlist2[qlist2.size()/2];
if (j - i < 1) {
return;
}
while (i <= j) {
while (qlist2[i] < middle) {
i++;
}
while (qlist2[j] > middle) {
j--;
}
if (i <= j) {
swap (qlist2[i], qlist2[j]);
i++;
j--;
}
}
if (left < j)
quick2 (qlist2, left, j);
if (i < right)
quick2 (qlist2, i, right);
}
答案 0 :(得分:3)
尝试将您的功能声明为:
void quick2(vector<int> & qlist2, int left, int right)
省略return
声明。
问题是数组是由C和C ++中的指针传递的。每个递归调用都会收到指向同一内存块的指针副本,并修改同一个数组,允许调用者看到递归调用对数组的修改。
向量是对象,因此每个递归调用都会传递一个向量的完整副本。调用者看不到递归调用所做的任何修改。上面的更改将引用传递给向量,以便不为每个新函数调用复制它。相反,所有调用都在同一个对象上运行。
另外,请检查middle
的初始化。如上所述,您将获取数组的中间元素,这在每次调用中都是相同的。 (请记住,qlist2.size()不会因呼叫而改变。)