排序列表不完美,但不会太远

Unperfect sorted list, but not too far

提问人: 提问时间:11/28/2021 更新时间:11/28/2021 访问量:45

问:

int partition(std::vector<int>& tab, int size){
    int pivot = rand() % size;
    std::swap(tab[pivot], tab[0]);
    int i = 1;
    for(int j = 1; j < size; j++){
        if(tab[j] < tab[0]){
            std::swap(tab[i], tab[j]);
            i++;
        }
    }
    std::swap(tab[0], tab[i-1]);
    return i-1;
}

这段代码非常封闭,可以给我一个很好的整数排序列表,但到目前为止仍然不完美。我只是不明白哪里出了问题。

如何修改partition()以使未排序的结果得到很好的排序?

C++ 排序 std

评论

0赞 Raymond Chen 11/28/2021
此程序足够小,您可以在调试器中单步执行它。程序在什么时候做了与你预期的不同的事情?

答:

1赞 1201ProgramAlarm 11/28/2021 #1

您始终对向量的开头进行排序。这两个递归调用需要处理其中不同的、不重叠的部分。这可以通过在 中添加第三个参数来完成,在向量中指定要排序的起始索引。然后需要将其传递给分区,以便仅在该范围内工作。quicksort

然后,函数原型将如下所示:

void partition(std::vector<int>& tab, int start, int size);
void quicksort(std::vector<int>& unsorted_list, int start, int size);

评论

0赞 11/28/2021
我编辑我的问题。我更改了代码,但我不知道我错在哪里。