Przejdź do treści głównej
INF.04Algorytmika i Struktury Danych

Sortowanie szybkie (Quicksort)

Wydajny algorytm sortowania oparty na paradygmacie 'dziel i zwyciężaj', wykorzystujący element osiowy (pivot) do partycjonowania tablicy.

Zasada działania Quicksort:

Quicksort wybiera element osiowy (pivot), a następnie dzieli tablicę na dwie podtablice:

  1. Elementy mniejsze lub równe pivotowi (po lewej stronie),
  2. Elementy większe od pivota (po prawej stronie). Następnie rekurencyjnie sortuje obie podtablice aż do osiągnięcia podtablic 1-elementowych.
CPP
void quickSort(int tab[], int lewy, int prawy) {
    if (lewy >= prawy) return;
    int pivot = tab[(lewy + prawy) / 2];
    int i = lewy, j = prawy;
    while (i <= j) {
        while (tab[i] < pivot) i++;
        while (tab[j] > pivot) j--;
        if (i <= j) {
            std::swap(tab[i], tab[j]);
            i++; j--;
        }
    }
    quickSort(tab, lewy, j);
    quickSort(tab, i, prawy);
}

Złożoność Quicksort:

  • Średnia złożoność czasowa: O(n log n) – w praktyce jeden z najszybszych algorytmów ogólnego przeznaczenia.
  • Pesymistyczna złożoność czasowa: O(n²) – występuje przy skrajnie niekorzystnym doborze pivota (np. zawsze najmniejszy element w posortowanej tablicy).
  • Złożoność pamięciowa: O(log n) (na ramki stosu wywołań rekurencyjnych).

Chcesz sprawdzić to pojęcie w praktyce?

Przeszukaj pytania z oficjalnych arkuszy CKE powiązane z hasłem Sortowanie szybkie (Quicksort) lub rozpocznij trening.