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

I_R_W14_M27_C++ 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 okrągły k zamknij nawias okrągły. Linia 3. i znak równości p minus 1. Linia 4. j znak równości k plus 1. Linia 5. dopóki prawda wykonuj dwukropek. Linia 6. wykonuj i znak równości i plus 1. Linia 7. dopóki i otwórz nawias ostrokątny znak równości k oraz tablica otwórz nawias okrągły i zamknij nawias okrągły otwórz nawias ostrokątny pivot. Linia 8. wykonuj j znak równości j minus 1. Linia 9. dopóki j zamknij nawias ostrokątny znak równości p oraz tablica otwórz nawias okrągły j zamknij nawias okrągły zamknij nawias ostrokątny pivot. Linia 10. jeżeli i otwórz nawias ostrokątny znak równości j wykonaj dwukropek. Linia 11. zamień tablica otwórz nawias okrągły i zamknij nawias okrągły z tablica otwórz nawias okrągły j zamknij nawias okrągły. Linia 12. w przeciwnym razie wykonaj dwukropek. Linia 13. 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.