不一致的快速排序功能

时间:2017-05-09 06:31:05

标签: c++ algorithm sorting quicksort

所以我编写了这个快速排序功能,它适用于某些输入。 例如,它适用于以下输入:“ 5 4 3 2 1 ”,“ 3 4 5 6 7 ”等。
但是,当我输入类似“ 0 3 5 4 -5 100 7777 2014 ”的内容时,它总是会混淆多位数字。
我希望有人可以帮我指出我的代码在这个测试用例中失败的地方。

Sort.cpp

options.forEach(function(c, index) {                    // ***
    c.addEventListener("click", function(){
        var divs = document.querySelectorAll(".popUp"); // ***
        if (index < divs.length) {                      // ***
            var div = divs[index];                      // ***
            // Use div here
        }
    }, false);
});

的main.cpp

std::vector<int> QuickSort::sortFunc(std::vector<int> vec, int left, int right) {
int i = left, j = right;
int tmp;
int pivot = vec.at( (left + right) / 2 );

/* partition */
while (i <= j) { 
    while (vec.at(i) < pivot)
        i++;
    while (vec.at(j) > pivot)
        j--;
    if (i <= j) {
        tmp = vec.at(i);
        vec.at(i) = vec.at(j);
        vec.at(j) = tmp;
        i++;
        j--;
    }
}

/* recursion */
if (left < j)
    return sortFunc( vec, left, j );
if (i < right)
    return sortFunc( vec, i, right );
else
{
    return vec;
}
}

感谢您提供给我的任何帮助。

1 个答案:

答案 0 :(得分:2)

我不确定这是否完全解决了,但是在对左侧部分进行排序之后,您仍然需要对正确的部分进行排序,但您已经返回了。

此外,按值传递向量并返回它是开销而不需要,因为最后应该只有一个版本的向量,因此通过引用传递是首选。在进行递归时,有时需要传递值并返回,特别是在回溯(寻找不同的路径)时,但在这种情况下,左右不提供所需的状态。