Ошибка в QUICKSORT. Невозможно исправить ошибку - PullRequest
0 голосов
/ 17 марта 2019

Я работал над QUICKSORT и сам написал всю эту программу. Код выглядит следующим образом

#include<stdio.h>
#include<stdlib.h>
void quicksort(int*,int,int);
int partition(int*,int,int);
swap(int*,int*);
int main()
{
    int *arr,n,i;
    printf("\nEnter the size of the array");
    scanf("%d",&n);
arr=(int*)malloc(n*sizeof(int));
printf("\nEnter the elements of the array one by one");
for(i=0;i<n;i++)
{
    scanf("%d",arr+i);
}    
quicksort(arr,0,n-1);
printf("\nThe Sorted Array is as follows");
for(i=0;i<n;i++)
{
    printf("%d",*(arr+i));
}
return 0;
}

void quicksort(int* arr,int a,int b)
{   
    int c;
        if(a<b)
        c=partition(arr,a,b);
    quicksort(arr,a,c-1);
    quicksort(arr,c+1,b);
}
int partition(int* arr,int a,int b)
{
    int x,y,index=*(arr+b);
    x=a,y=b-1;
    while(x<y)
    {
        if(*(arr+x)<index)
        {
            x++;

        }
        if(index<*(arr+y))
        {
            y--;

        }
        swap((arr+x),(arr+y));
    }
    swap((arr+x),(arr+b));

    return x;
}

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

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

1 Ответ

0 голосов
/ 17 марта 2019

Что должно происходить, если a больше или равно b?это должно решить проблему сегментации.

void quicksort(int* arr, int a, int b) {
    int c;
    if (a < b) {
        c = partition(arr,a,b);
        quicksort(arr, a, c-1);
        quicksort(arr, c+1, b);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...