Witam, proszę Was o uzupełnienie algorytmu sortowania szybkiego o komentarze. Chodzi o to że nie do końca rozumiem działanie samej funkcji.
Wiem że algorytm dzieli tablice na dwie partycje, nastepnie zaczyna dzielić te partycje na kolejne metodą "Dziel i zwyciężaj" jednak nie rozumiem np. tej części kodu, wiem że zapętla on działanie funkcji (rekurencja) partycjując coraz mniejsze zbiory, ale dlaczego np. dane wprowadzane do funkcji 'Sortowanie' są różne od siebie
if (q>lewy) Sortowanie(tablica,lewy,q);
if (p<prawy) Sortowanie(tablica,p,prawy);
tzn. występuje (tablica,lewy,q), a dlaczego niżej nie ma (tablica,prawy,p) tylko (tablica,p,prawy).
Proszę o pomoc, najlepiej by było gdyby ktoś uzupełnił algorytm o odpowiednie komentarze. Oto kod:
void Sortowanie(int *tablica, int lewy, int prawy)
{
int v=tablica[(lewy+prawy)/2];
p=lewy;
q=prawy;
do
{
while (tablica[p]<v) p++;
while (tablica[q]>v) q--;
if (p<=q)
{
swap (tablica[p],tablica[q]);
p++;
q--;
}
} while (p<=q);
if (q>lewy) Sortowanie(tablica,lewy,q);
if (p<prawy) Sortowanie(tablica,p,prawy);
}