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

Sortowanie przez zliczanie (Counting Sort) i Kubełkowe (Bucket Sort)

Nieporównaniowe algorytmy sortowania o liniowej złożoności czasowej O(n+k), opierające się na zliczaniu wystąpień kluczy lub podziale liczb na kubełki w znanym przedziale.

Nieporównaniowe algorytmy sortowania

Tradycyjne algorytmy sortowania oparte na porównaniach (QuickSort, MergeSort, HeapSort) mają teoretyczną granicę złożoności rzędu Ω(n log n). Algorytmy Counting Sort i Bucket Sort omijają to ograniczenie, osiągając liniowy czas działania O(n + k) przy założeniu ograniczonego zakresu danych wejściowych.

1. Sortowanie przez zliczanie (Counting Sort):

  • Zasada: Tworzy pomocniczą tablicę liczników count[] o rozmiarze równym zakresowi wartości [0, k]. Zlicza wystąpienia każdej liczby, a następnie przepisuje elementy w kolejności rosnącej.
  • Złożoność: Czasowa O(n + k), Pamięciowa O(k) (gdzie k to rozpiętość liczb max - min).
  • Wada: Nieefektywny, gdy zakres k jest olbrzymi w porównaniu do liczby elementów n (np. sortowanie 5 liczb o wartościach od 1 do 10⁹).

2. Sortowanie kubełkowe (Bucket Sort):

  • Zasada: Dzieli przedział wartości na m równych przedziałów (kubełków), rozrzuca elementy do odpowiednich kubełków, sortuje każdy kubełek osobno (np. Insertion Sortem), a na koniec łączy zawartość kubełków w jedną listę.
  • Złożoność: Średnia O(n + m), pesymistyczna O(n²) (gdy wszystkie elementy wpadną do jednego kubełka).

Pułapki na egzaminie INF.04:

  • Sortowanie przez zliczanie charakteryzuje się złożonością O(n + k) i wymaga znajomości zakresu sortowanych wartości całkowitych.

Chcesz sprawdzić to pojęcie w praktyce?

Przeszukaj pytania z oficjalnych arkuszy CKE powiązane z hasłem Sortowanie przez zliczanie (Counting Sort) i Kubełkowe (Bucket Sort) lub rozpocznij trening.