I_R_W14_M27_C++ Metoda Quicksort
Pseudokod sortowania quick sort
Przeanalizujmy pseudokod sortowania quick sort:
pto miejsce, od którego chcemy posortować tablicę; gdy chcemy wykonać sortowanie od początku tablicy, top = 1,kto miejsce zakończenia sortowania,qto punkt podziału tablicy.
Rozpoczynamy funkcję sortowanieSzybkie dla całej tablicy, którą chcemy posortować. Jeżeli p jest mniejsze od k, czyli tablica składa się z więcej niż jednego elementu, to wykonujemy następujące czynności. Wywołujemy funkcję podziałTablicy, która dzieli tablicę na dwie podtablice, a punkt podziału zapisuje w zmiennej q. Teraz rekurencyjnie wywołujemy funkcję sortowanieSzybkie dla podtablic. Algorytm kończy działanie, gdy w wyniku podziału pozostaną tablice jednoelementowe.
Pseudokod funkcji podziałTablicy wygląda następująco:
Za pomocą zmiennej
pivotzapisujemy liczbę, która odpowiada za to, w której podtablicy umieścimy każdy z elementów. Jeżeli rozpatrywana liczba będzie mniejsza odpivot, umieścimy ją w tablicy pierwszej, jeżeli większa, to w drugiej, a jeżeli równa, to może pojawić się zarówno w pierwszej, jak i drugiej. Zmiennapivotmoże być dowolnym elementem tablicy, np. pierwszym, ostatnim lub środkowym. My wybraliśmy ostatni element.
Następnie w zmiennych
iorazjzapisujemy miejsca przed pierwszym oraz za ostatnim elementem tablicy, którą chcemy posortować.
Zwiększamy wówczas indeks
i, do momentu znalezienia elementu tablicy większego niżpivot. Indeksjzmniejszamy, aby w końcu znaleźć element mniejszy odpivot.
Po znalezieniu mniejszego elementu zmieniamy te elementów, aby uzyskać w podtablicach odpowiednie wartości.
Wymienione dwa punkty, opisujące czynności zamiany, wykonujemy do momentu, gdy
iosiągnie wartość większą niżj.
W tym momencie funkcja zwraca indeks
j, czyli punkt podziału tablicy.