提问人: 提问时间:11/28/2021 更新时间:11/28/2021 访问量:45
排序列表不完美,但不会太远
Unperfect sorted list, but not too far
问:
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()以使未排序的结果得到很好的排序?
答:
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
我编辑我的问题。我更改了代码,但我不知道我错在哪里。
评论