Может ли кто-нибудь помочь в обнаружении ошибки в следующем коде быстрой сортировки, который показывает ошибку сегментации (SIGSEGV) - PullRequest
0 голосов
/ 30 марта 2020

КОД ДЛЯ QUICKSORT

Я использовал функцию разбиения, чтобы получить сводную точку и после нее рекурсию, которая решает проблему, но при компиляции она показывает ошибку сегментации.

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

}

Ответы [ 2 ]

1 голос
/ 30 марта 2020
void quickSort(int arr[], int low, int high) 

{if (low

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

}

0 голосов
/ 30 марта 2020

Посмотрите на этот код

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); вызовет функцию быстрой сортировки с теми же параметрами, определяемыми при переполнении стека (та да !!).

Смысл быстрой сортировки в том, что элемент pivot находится в правильном положении, поэтому вы рекурсивно сортируете все, кроме элемента pivot.

Что-то вроде

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

Не проверено .

...