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

问题描述 投票:-1回答:1
***CODE FOR QUICKSROT***

我已经使用了分区功能来获得虚拟机,然后通过旋转解决了问题,但是在编译时却显示出分段故障

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);
    }

}
c++ algorithm sorting segmentation-fault quicksort
1个回答
0
投票

查看此代码

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);

未测试。

© www.soinside.com 2019 - 2024. All rights reserved.