【问题标题】:Unperfect sorted list, but not too far不完美的排序列表,但不会太远
【发布时间】:2022-01-05 10:20:25
【问题描述】:
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++ sorting std


【解决方案1】:

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

函数原型如下所示:

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

【讨论】:

  • 我编辑我的问题。我改了代码,就是不知道哪里错了。
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 2015-07-22
  • 2017-06-04
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
相关资源
最近更新 更多