RkHBWKqQbkjKI
Fotografia przedstawia spiralne elementy w fabryce. Są wysokie, identyczne. Stoją w jednym rzędzie.

PYI_R_W14_M27 Metoda Quicksort

Źródło: Kelvyn Ornettte Sol Marte, domena publiczna.

Pseudokod sortowania quick sort

Przeanalizujmy pseudokod sortowania quick sort:

Linia 1. funkcja sortowanieSzybkie otwórz nawias okrągły tablica przecinek p przecinek k zamknij nawias okrągły. Linia 2. jeżeli p otwórz nawias ostrokątny k wykonaj dwukropek. Linia 3. q znak równości podziałTablicy otwórz nawias okrągły tablica przecinek p przecinek k zamknij nawias okrągły. Linia 4. sortowanieSzybkie otwórz nawias okrągły tablica przecinek p przecinek q zamknij nawias okrągły. Linia 5. sortowanieSzybkie otwórz nawias okrągły tablica przecinek q plus 1 przecinek k zamknij nawias okrągły.
  • p to miejsce, od którego chcemy posortować tablicę; gdy chcemy wykonać sortowanie od początku tablicy, to p = 1,

  • k to miejsce zakończenia sortowania,

  • q to 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:

Linia 1. funkcja podziałTablicy otwórz nawias okrągły tablica przecinek p przecinek k zamknij nawias okrągły. Linia 2. pivot znak równości tablica otwórz nawias kwadratowy k zamknij nawias kwadratowy. Linia 3. i znak równości p. Linia 4. j znak równości k. Linia 5. dopóki prawda wykonuj dwukropek. Linia 6. dopóki i otwórz nawias ostrokątny znak równości k oraz tablica otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias ostrokątny pivot. Linia 7. wykonuj i znak równości i plus 1. Linia 9. dopóki j zamknij nawias ostrokątny znak równości p oraz tablica otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias ostrokątny pivot. Linia 10. wykonuj j znak równości j minus 1. Linia 12. jeżeli i otwórz nawias ostrokątny znak równości j wykonaj dwukropek. Linia 13. zamień tablica otwórz nawias kwadratowy i zamknij nawias kwadratowy z tablica otwórz nawias kwadratowy j zamknij nawias kwadratowy. Linia 14. i znak równości i plus 1. Linia 15. j znak równości j minus 1. Linia 16. w przeciwnym razie wykonaj dwukropek. Linia 17. zwróć j.
  • Za pomocą zmiennej pivot zapisujemy liczbę, która odpowiada za to, w której podtablicy umieścimy każdy z elementów. Jeżeli rozpatrywana liczba będzie mniejsza od pivot, 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. Zmienna pivot może być dowolnym elementem tablicy, np. pierwszym, ostatnim lub środkowym. My wybraliśmy ostatni element.

  • Następnie w zmiennych i oraz j zapisujemy 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. Indeks j zmniejszamy, aby w końcu znaleźć element mniejszy od pivot.

  • 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 i osiągnie wartość większą niż j.

  • W tym momencie funkcja zwraca indeks j, czyli punkt podziału tablicy.