簡體   English   中英

我的機器上的QuickSort segfaults

[英]QuickSort segfaults on my machine

#include<stdio.h>
int partition(int p[],int lb,int ub)
{

    int i,temp,up,down,pivot;

    pivot=p[lb];
    up=ub;
    down=lb;

    while(down<up)
    {
        while(p[down]<=pivot&&down<ub)
        down++;
        while(p[up]>pivot)
        up--;
        if(down<up)   //exchange them
        {
            temp=p[down];
            p[down]=p[up];
            p[up]=temp;

        }
    }
        temp=p[lb];
    p[lb]=p[up];
    p[up]=temp;
return up;

}
void myqsort(int a[], int lb,int ub)
{
int q=partition(a,lb,ub);
myqsort(a,lb,q-1);
myqsort(a,q+1,ub);
}
int main()
{
int m[]={1,2,5,6,3};
for(int i=0;i<5;i++)
printf("%d",m[i]);
myqsort(m,0,4);
for(int i=0;i<5;i++)
printf("%d",m[i]);
return 0;
}

上面的代碼給出了分段錯誤。 這是我在c中實現的遞歸quicksort。 看了其他答案,但不能解決我的情況。 知道出了什么問題嗎? 知道我做錯了什么嗎?

當我gdb ed您的代碼時,堆棧跟蹤變得很糟糕。

#0  partition (p=0xbffff8a4, lb=0, ub=-174722) at qs.c:3
#1  0x08048525 in myqsort (a=0xbffff8a4, lb=0, ub=-174722) at qs.c:33
#2  0x08048540 in myqsort (a=0xbffff8a4, lb=0, ub=-174721) at qs.c:34
#3  0x08048540 in myqsort (a=0xbffff8a4, lb=0, ub=-174720) at qs.c:34
#4  0x08048540 in myqsort (a=0xbffff8a4, lb=0, ub=-174719) at qs.c:34
#5  0x08048540 in myqsort (a=0xbffff8a4, lb=0, ub=-174718) at qs.c:34
#6  0x08048540 in myqsort (a=0xbffff8a4, lb=0, ub=-174717) at qs.c:34
#7  0x08048540 in myqsort (a=0xbffff8a4, lb=0, ub=-174716) at qs.c:34
#8  0x08048540 in myqsort (a=0xbffff8a4, lb=0, ub=-174715) at qs.c:34
#9  0x08048540 in myqsort (a=0xbffff8a4, lb=0, ub=-174714) at qs.c:34
#10 0x08048540 in myqsort (a=0xbffff8a4, lb=0, ub=-174713) at qs.c:34
....

函數myqsort無限遞歸。

您應該在myqsort添加兩行

void myqsort(int a[], int lb,int ub)
{
    if (lb >= ub)
        return;
    int q=partition(a,lb,ub);
    myqsort(a,lb,q-1);
    myqsort(a,q+1,ub);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM