排序算法,(快速排序)小bug
Sorting algorithm, (quick sort) small bug
所以,这是我的排序算法。 输出为:
0,2,3,3,2,1,4,6,10,12,12,5,15,21,21,15,22,32,26,29,...
它很近,但里面有一个错误,我似乎找不到。 每 6 个数字都是错误的。
我的矢量长度是 20000。 所以我调用函数
quickSort(a,0,20000); //(I think it is support to be 0,20000, but I am not sure though..)
我认为这是正确的,但不确定。
template <typename Comparable>
const Comparable& median3(vector<Comparable>& a, int left, int right){
int center=(left+right)/2;
if(a[center]<a[left]){
swap(a[center],a[left]);
}
if(a[right]<a[left]){
swap(a[right],a[left]);
}
if(a[right]<a[center]){
swap(a[right],a[center]);
}
swap(a[center],a[right-1]);
return a[right-1];
}
template <typename Comparable>
void quickSort(vector<Comparable>& a, int left = 0, int right = 20000){
if(left+10 <= right){
const Comparable& pivot = median3(a,left,right);
int i=left;
int j=right-1;
for(;;){
while(a[++i] < pivot){}
while(pivot < a[--j]){}
if(i<j){
swap(a[i],a[j]);
}else{
break;
}
}
swap(a[i], a[right-1]);
quickSort(a,left,i-1);
quickSort(a,i+1,right);
}
else{
//
}
}
这一行:
if(left+10 <= right){
对我来说毫无意义。从本质上讲,您的例程不会费心对少于 10 个元素的子列表进行排序。
为什么?这是一种递归算法,需要排序到 2 个项目的列表才能正确完成。
正如我在评论中所说,从小到大测试您的递归算法。错误会很快弹出。
相关文章:
- 如何修复我的快速排序实现?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在 MIPS 中快速排序
- 不正确的比较和交换计数器输出用于快速排序功能
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 并行快速排序分区中的隔离错误
- 实现 3 路分区以实现快速排序
- 为什么这个快速排序实现给出了一个奇怪的输出
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 快速排序不适用于大型数组
- 快速排序;分段错误,但找不到位置?
- 快速排序函数在快速排序算法中如何工作?
- 3路随机快速排序分区功能
- 在最坏的情况下试验快速排序.它运行良好,但在最坏的情况下发生未知错误.我想
- 当给出预先排序的输入时,为什么我的快速排序实现很慢
- 我想要一个改变数组快速排序的2个数字的函数
- 排序算法,(快速排序)小bug
- c++随机快速排序Bug