Witam serdecznie. Jestem nowym użytkownikiem forum MZ, dlatego, jeśli to możliwe, proszę o wyrozumiałość. ;) Witajcie.
Od kilku godzin analizuję algorytm quicksort. Większość już rozumiem (tak, wiem, szybki nie jestem...), ale mam kilka wątpliwości.
void quicksort(int *tablica, int lewy, int prawy) {
int v=tablica[(lewy+prawy)/2];
int i,j,x;
i=lewy;
j=prawy;
do{
while (tablica[i]<v) i++;
while (tablica[j]>v) j--;
if (i<=j){
x=tablica[i];
tablica[i]=tablica[j];
tablica[j]=x;
i++;
j--;
}
} while (i<=j);
if (j>lewy) quicksort(tablica,lewy, j);
if (i<prawy) quicksort(tablica, i, prawy);
}
Kod z prezentacji pana Zelenta.
Moje pytania:
- dlaczego w linii 9. i 16. używamy warunku mniejszy bądź równy zamiast mniejszy?
- dlaczego używamy pętli do..while, a nie while; czemu pętla powinna wykonać się raz przed sprawdzeniem warunku?
- dlaczego w 17. i 18. linijce kodu są warunki; co by było bez nich?
Pozdrawiam, z góry dziękuję za odpowiedź.