任何人都可以帮助找到以下快速排序代码中的错误,它显示分段错误(SIGSEGV)

Can anyone help in finding the errror in the following code of quicksort,its's showing Segmentation Fault (SIGSEGV)

快速排序代码

我使用了分区函数来获取主元,然后递归解决了问题,但在编译时显示分段错误。

void swap(int* a,int* b)
{
    int temp=*a;
    *a=*b;
    *b=temp;
}

int partition (int arr[],int start,int end)
{
    int piviot=arr[end-1];
    int pindex=start;
    for(int i=start;i<end-1;i++)
        if(arr[i]<=piviot) 
        swap(&arr[i],&arr[pindex++]);
    swap(&arr[end-1],&arr[pindex]);
    return pindex;
}

void quick_sort(int arr[],int start,int end)
{
    if(start<end)
    {
        int pindex=partition(arr,start,end);
        quick_sort(arr,start,pindex);
        quick_sort(arr,pindex,end);
    }

}

看这段代码

void quick_sort(int arr[],int start,int end)
{
    if(start<end)
    {
        int pindex=partition(arr,start,end);
        quick_sort(arr,start,pindex);
        quick_sort(arr,pindex,end);
    }
}

如果 pindex 等于 start,则 quick_sort(arr,pindex,end); 将调用具有相同参数的快速排序函数,导致堆栈溢出(ta da!!)。

快速排序的要点是枢轴元素在正确的位置,所以你递归排序除了枢轴元素之外的所有元素。

类似

        int pindex = partition(arr, start, end);
        quick_sort(arr, start, pindex);
        quick_sort(arr, pindex + 1, end);

未测试。

void quickSort(int arr[], int low, int high) 

{ 如果(低 < 高) { /* pi 是分区索引,arr[p] 现在是 在正确的地方 */ int pi =分区(arr,低,高);

    // Separately sort elements before 
    // partition and after partition 
    quickSort(arr, low, pi - 1); 
    quickSort(arr, pi + 1, high); 
} 

}