我有一个实现双轴快速排序算法的任务。它似乎适用于具有少量数字的向量,但是当我尝试对具有例如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);
}
感谢。
答案 0 :(得分:1)
附加调试器。
或者如果您不想这样做,请在此之前打印出L并重新运行。
int spivot = A[L]; //Error here.
看看你得到了什么。这可能是意想不到的。然后看看在递归调用中如何传递该值,并查看导致您获取错误值的原因。我打赌你要在一个或多个方向上从阵列末端递增。