Quicksort C - Początkujący

0

Cześć, dopiero się uczę i nie mam pojęcia gdzie jest błąd w powyższym kodzie, a nie zależy mi na tym żeby przepisać coś czego nie rozumiem z neta :')
Byłby ktoś w stanie nakierować na miejsce które należy poprawić?
Z góry dzięki.

#include <stdio.h>
#include <stdlib.h>


void quicksort(int* ciag,int a, int b){

int i,j,pivot,x;

    i=a;
    j=a;

    pivot=ciag[b];
    while(i<b){
        if(ciag[i]<pivot){
            i++;
            j++;
        }
        while(ciag[i]>pivot){
                i++;

        }
        if(ciag[i]<pivot){
            x=ciag[i];
            ciag[i]=ciag[j];
            ciag[j]=x;
            i++;
            j++;
        }
    }
 if(i<b){
    quicksort(ciag,a,j);
   }
    if(i>b){
        quicksort(ciag,j,b);
    }

}


int main()
{

    int n,i;
    scanf("%d",&n);
    int ciag[n];
    for(i=0;i<n;i++){

        scanf("%d",&ciag[i]);
    }
    quicksort(ciag,0,n-1);

    for(i=0;i<n;i++){
        printf("%d\t",ciag[i]);
    }
    return 0;
}


0

Nie mozesz zadeklarowac tablicy o nieznanym rozmiarze poniewaz kompilator nie wie jaka pamiec ma zarezerwowac dla tablicy.
Jesli chcesz stworzyc tablice o rozmiarze wpisanym z klawiatury musisz zastosowac dynamiczna alokacje pamieci.

0

W jaki sposób dedukujesz, że w kodzie jest błąd? Mamy się domyślić? https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

0

Faktycznie moja wina, dedukuję po tym że po włączeniu programu i wpisaniu liczb nie dzieje się zupełnie nic program jakby "zawiesza się" nie kończy ani nie wyświetla komunikatu o błędzie.

0

https://wandbox.org/permlink/cNfaAZj83xMsupeZ

U mnie działa. Zechciej podzielić się MCVE

0

https://wandbox.org/permlink/juCTaRLkvcJQwnyN

Nie wiem, faktycznie program dochodzi do końca ale wciąż nie sortuje :/

0

Podejrzewam ze tak jak ja korzystasz ze starego kompilatora ktory nie obsluguje VLA. Rozwiazaniem ktore ci polecam jest zastosowanie dynamicznej alokacji pamieci i wtedy powinno dzialac

1 użytkowników online, w tym zalogowanych: 0, gości: 1