快速排序与向量奇怪的错误

时间:2010-12-11 03:09:46

标签: c++ sorting vector quicksort

嗨,我需要帮助我为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);
}

1 个答案:

答案 0 :(得分:3)

尝试将您的功能声明为:

void quick2(vector<int> & qlist2, int left, int right)

省略return声明。

问题是数组是由C和C ++中的指针传递的。每个递归调用都会收到指向同一内存块的指针副本,并修改同一个数组,允许调用者看到递归调用对数组的修改。

向量是对象,因此每个递归调用都会传递一个向量的完整副本。调用者看不到递归调用所做的任何修改。上面的更改将引用传递给向量,以便不为每个新函数调用复制它。相反,所有调用都在同一个对象上运行。

另外,请检查middle的初始化。如上所述,您将获取数组的中间元素,这在每次调用中都是相同的。 (请记住,qlist2.size()不会因呼叫而改变。)