所以我编写了这个快速排序功能,它适用于某些输入。
例如,它适用于以下输入:“ 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;
}
}
感谢您提供给我的任何帮助。
答案 0 :(得分:2)
我不确定这是否完全解决了,但是在对左侧部分进行排序之后,您仍然需要对正确的部分进行排序,但您已经返回了。
此外,按值传递向量并返回它是开销而不需要,因为最后应该只有一个版本的向量,因此通过引用传递是首选。在进行递归时,有时需要传递值并返回,特别是在回溯(寻找不同的路径)时,但在这种情况下,左右不提供所需的状态。