双枢轴快速排序
Dual Pivot Quick Sort
本文关键字:快速排序 更新时间:2023-10-16
我有一个实现双枢轴快速排序算法的任务。它似乎适用于具有少量数字的向量,但是当我尝试对例如100000的向量进行排序时,我会得到分割错误。任何帮助吗?
void quicksort_dual_pivot(vector <int> &A, int L, int R)
{
if(L>=R) return;
int spivot = A[L]; //Error here.
int bpivot = A[R];
if(spivot > bpivot){
swap(A[R],A[L]);
swap(spivot,bpivot);
}
int l = L+1;
int g = R-1;
for(int k=l;k<=g;k++){
if(A[k] < spivot) {
swap(A[k],A[l]);
l++;
}
else if(A[k] > bpivot){
while(A[g] > bpivot && k < g){
g--;
}
swap(A[g],A[k]);
g--;
if(A[k] < spivot){
swap(A[k],A[l]);
l++;
}
}
}
l--;
g++;
swap(A[L],A[l]);
swap(A[R],A[g]);
quicksort_dual_pivot(A,L,l-1);
quicksort_dual_pivot(A,l+1,g-1); // And error here.
quicksort_dual_pivot(A,g+1,R);
}
谢谢。
附加调试器。
或者如果你不想这样做,在这之前打印出L,然后重新运行。
int spivot = A[L]; //Error here.
看看你得到了什么。这大概是意料之外的事情。然后看看这个值是如何在递归调用中传递进来的,看看是什么导致你得到了一个错误的值。我敢打赌你是在一个或多个方向上从数组的末尾开始递增。
相关文章:
- 如何修复我的快速排序实现?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在 MIPS 中快速排序
- 不正确的比较和交换计数器输出用于快速排序功能
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 并行快速排序分区中的隔离错误
- 实现 3 路分区以实现快速排序
- 为什么这个快速排序实现给出了一个奇怪的输出
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 快速排序不适用于大型数组
- 快速排序;分段错误,但找不到位置?
- 快速排序函数在快速排序算法中如何工作?
- 3路随机快速排序分区功能
- 在最坏的情况下试验快速排序.它运行良好,但在最坏的情况下发生未知错误.我想
- 当给出预先排序的输入时,为什么我的快速排序实现很慢
- 我想要一个改变数组快速排序的2个数字的函数
- C++一个具有 2 个参数(___ _____,整数长度)的函数中的快速排序
- 迭代快速排序方法的分区算法问题