C++ 快速排序错误,可能是1 C++;

C++ 快速排序错误,可能是1 C++;,c++,quicksort,off-by-one,C++,Quicksort,Off By One,尝试编写一个快速排序,并花了一段时间进行调试。问题似乎出在第二个递归调用中,但我不知道该怎么办。任何指针都会很棒。谢谢 void quickSort(vector<int> &list, int left, int right){ int pivot = left; int temp = right; if(left >= right - 1) return; while (left != right) {

尝试编写一个快速排序,并花了一段时间进行调试。问题似乎出在第二个递归调用中,但我不知道该怎么办。任何指针都会很棒。谢谢

void quickSort(vector<int> &list, int left, int right){

    int pivot = left;
    int temp = right;

    if(left >= right - 1)
        return;

    while (left != right) {
        if (pivot == left){
            if (list[pivot] > list[right]) {
                //-------------------------
                int tempList = list[right];
                list[right] = list[pivot];   // Swap for now
                list[pivot] = tempList;
                //-------------------------
                pivot = right;
                left++;
            }else{
                right--;
            }

        }else{
            if (list[pivot] < list[left]) {
                //-------------------------
                int tempList = list[left];
                list[left] = list[pivot];   // Swap for now
                list[pivot] = tempList;
                //-------------------------
                pivot = left;
                right--;
            }else{
                left++;
            }
        }
    }
    quickSort(list, 0, right-1);
    quickSort(list, right + 1, temp);
}
void快速排序(向量和列表,左整数,右整数){
int轴=左;
int temp=右;
如果(左>=右-1)
返回;
while(左!=右){
如果(轴==左){
如果(列表[透视]>列表[右]){
//-------------------------
int templast=列表[右];
list[right]=list[pivot];//现在交换
列表[pivot]=模板列表;
//-------------------------
枢轴=右;
左++;
}否则{
对--;
}
}否则{
if(列表[透视]<列表[左]){
//-------------------------
int templast=列表[左];
list[left]=list[pivot];//现在交换
列表[pivot]=模板列表;
//-------------------------
枢轴=左;
对--;
}否则{
左++;
}
}
}
快速排序(列表,0,右-1);
快速排序(列表,右侧+1,临时);
}
这就是我现在制作数据集的方式:

srand(time(0));
vector<int> list;
vector<int> sortedList;
int i;
for (i=0;i<10;i++) list.push_back(rand() %100);
srand(时间(0));
向量表;
向量分类表;
int i;

对于(i=0;i由于您正在访问位于位置
right
left
的元素,因此我假设初始调用如下所示:

quickSort(list, 0, list.size()-1);
如果列表最初初始化为
向量{2,1}
,则第一次调用将求值为

quickSort(list, 0, 1);
使用
left=0
right=1
时,第一个
if
-语句将计算为

    if(0 >= 1-1)
        return;

即使列表明显未排序,函数也将返回而不交换两个元素。

我更新了更多详细信息。错误只会每隔几次出现一次。平均错误率可能为1/4。与其针对随机数据进行测试,不如设置单元测试来测试日益复杂的场景。您可以更好地了解d并复制任何失败。如果您有一个导致错误的随机数据集,请设置一个每次都使用该数据集的测试。@Bargangilo-我也会避免命名您的参数
list
,因为已经存在
std::list
模板类非常感谢。我将函数结束条件更改为
If(left>=right){return;}
现在它每次都在工作。