Почему этот код реализации алгоритма быстрой сортировки получает ошибку ошибки сегментации? - PullRequest
0 голосов
/ 03 июля 2019

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

    #include<stdio.h>

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

    int partition(int arr[],int first,int last){
        int pivot=arr[last];
        int i=first-1;
        for(int j=first;j<=last-1;j++){
            if(arr[j]<=pivot){
            i++;
            swap(&arr[i],&arr[j]);
        }
     }
     swap(&arr[i+1],&arr[last]);
     return (i+1);
   }

   void quickSort(int arr[],int first,int last){
       int pivot=partition(arr,first,last);
       quickSort(arr,first,pivot-1);
       quickSort(arr,pivot+1,last);
   }



   int main() {
      int arr[]={1,8,3,9,4,5,7};
      int size=sizeof(arr)/sizeof(arr[0]);
      quickSort(arr,0,size-1);
      for(int i=0;i<size;i++){
          printf("%d ", arr[i]);
      }
   }

Я ожидал увидеть 1 3 4 5 7 8 9 но у меня ошибка сегментации.

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

Внутри quickSort, вам нужно проверить, что first меньше last:

   void quickSort(int arr[],int first,int last)
   {
       if(first < last)
       {
           int pivot=partition(arr,first,last);
           quickSort(arr,first,pivot-1);
           quickSort(arr,pivot+1,last);
       }
   }

Вы также можете присвоить GeeksForGeeks, так как этот код очень похож на их.

0 голосов
/ 03 июля 2019

Вам нужно добавить базовый регистр при вызове quicksort (), потому что при написании он будет бесконечно вызывать и приведет к ошибке сегментации.

...