Кто-нибудь может помочь мне найти, что не так с моим кодом?

#c #arrays #data-structures #quicksort

Вопрос:

Я написал код быстрой сортировки на c , но он не работает. кто-нибудь может сказать мне, что не так с этим кодом? Всякий раз, когда я даю ввод, он не возвращает никаких выходных данных. пример:

5

5 4 3 6 2


Процесс завершен через 5,997 секунды с возвращаемым значением 3221225725 Нажмите любую клавишу, чтобы продолжить.. ..

почему он не возвращает никаких выходных данных? несмотря на то, что я проверял код много раз, но все равно я сталкиваюсь с той же проблемой

 #include<iostream>

using namespace std;

void swap(int *a, int *b)           //swap function 

{

    int c;

    c=*b;

    *b=*a;

    *a=c;

}

int partition(int arr[], int i, int j)             //partition function

 {

    int pivot=arr[j];
    while(i<j) {
        while(i<=pivot) {
            i  ;
        }
        while(j>=pivot) {
            j--;
        }
        if(i<j) {
            swap(amp;arr[i],amp;arr[j]);
        }
    }
    swap(amp;pivot,amp;arr[j]);
    return j;
}

void quicksort(int arr[], int i, int j)   //quicksort function

 {

    if(i<j) {
        int p;
        p=partition(arr,i,j);
        quicksort(arr,i,p-1);
        quicksort(arr,p 1,j);
    }
}

    void print(int arr[],int n)      //function to print the array
    
     {
    
    for(int i=0;i<n;i  ) {
    cout<<arr[i]<<" ";
    }
    
    }

int main() 

{

    int n;
    cin>>n;
    int arr[n];
    for(int i=0;i<n;i  ) {
        cin>>arr[i];
    }
    int x=0,y=n-1;
    quicksort(arr,x,y);
    print(arr,n);
    return 0;
}
 

Комментарии:

1. StackOverflow не является службой отладки. Что вы пытались сделать до сих пор, чтобы попытаться устранить это самостоятельно? Вы прошли через код с помощью настоящего отладчика? » это не работает » — неверное описание проблемы. Что именно не работает? Какой вклад в это вносится? Каков ожидаемый результат и каков фактический результат? Будьте конкретны.

2. Каждый раз, когда я вставляю ввод, он не выдает никаких выходных данных. Он просто говорит — Процесс завершен через 5,997 секунды с возвращаемым значением 3221225725 Нажмите любую клавишу, чтобы продолжить.. ..

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

4. Я уже пробовал это, и он правильно принимает ввод. @sittsering

5. Что должен сказать ваш компилятор int arr[n]; , как только вы включите предупреждения?

Ответ №1:

Это должно быть while(arr[i]<=pivot) вместо while(i<=pivot) того, чтобы то же самое относится к j

 int partition(int arr[], int i, int j) 

 {

    int pivot=arr[j];
    while(i<j) {
        while(arr[i]<=pivot) {
            i  ;
        }
        while(arr[j]>pivot) {
            j--;
        }
        if(i<j) {
            swap(amp;arr[i],amp;arr[j]);
        }
    }
    swap(amp;pivot,amp;arr[j]);
    return j;
}
 

Комментарии:

1. Спасибо, @sittsering. Это помогло. Кроме того, я переоделся while(arr[j]>=pivot) while(arr[j]>pivot) , и это сработало.