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:
- Elementy mniejsze lub równe pivotowi (po lewej stronie),
- 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.