Algoritmalar

Taban Sıralaması

Sıralama O(d · (n + k)) O(n + k)

Karşılaştırmasız sıralar: en düşükten en yüksek basamağa kadar her basamak için kararlı sayma geçişi yapar.

en fazla 16 sayı (0–999)
Boşta
23
7
41
15
3
34
9
28

8 eleman üzerinde Radix Sort başlıyor.

DeğişmezDizi, işlenen tüm basamaklara göre sıralı. Her tur kararlı olduğu için önceki turlar bozulmaz.

1/38
hareket0sondaj0exp1i0
radix-sort.c
int getMax(int arr[], int n) {
int mx = arr[0];
for (int i = 1; i < n; i++)
if (arr[i] > mx) mx = arr[i];
return mx;
}
void countingPass(int arr[], int n, int exp) {
int out[n], count[10] = {0};
for (int i = 0; i < n; i++)
count[(arr[i] / exp) % 10]++;
for (int d = 1; d < 10; d++)
count[d] += count[d - 1];
for (int i = n - 1; i >= 0; i--)
out[--count[(arr[i] / exp) % 10]] = arr[i];
for (int i = 0; i < n; i++)
arr[i] = out[i];
}
void radixSort(int arr[], int n) {
for (int exp = 1; getMax(arr, n) / exp > 0; exp *= 10)
countingPass(arr, n, exp);
}

Taban Sıralaması nasıl çalışır?

Hiç karşılaştırma yapmaz. En düşük basamaktan başlayarak her basamağı kararlı bir sayma geçişiyle sıralar — geçişler kararlı olduğu için önceki basamakların sırası korunur.

En iyi durum

Az basamak (küçük anahtar aralığı): fiilen doğrusal, O(d·(n+k)).

En kötü durum

Çok basamak (dev anahtarlar) d'yi büyütür; kova belleği ekstradır.

Ne zaman kullanılır?

Sınırlı basamak sayılı büyük tamsayı veya sabit uzunluklu dize dizileri.