# ๊ธฐ์ ์ ๋ ฌ (Radix Sort)
written by sohyeon, hyemin ๐ก
# 1. ๊ธฐ์ ์ ๋ ฌ์ด๋?
๊ธฐ์ ์ ๋ ฌ
์ ๋ฎ์ ์๋ฆฌ์๋ถํฐ ๋น๊ตํ์ฌ ์ ๋ ฌํด ๊ฐ๋ค๋ ๊ฒ์ ๊ธฐ๋ณธ ๊ฐ๋
์ผ๋ก ํ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๊ธฐ์ ์ ๋ ฌ์ ์
๋ ฅ ๋ฐ์ดํฐ์ ๋ํด์ ์ด๋ค ๋น๊ต ์ฐ์ฐ๋ ์คํํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ ์ ์๋ ์๋ค๋ฅธ ์ ๋ ฌ ๊ธฐ๋ฒ์ด๋ค.
# 2. ๋์ ๋ฐฉ์
10๊ฐ์ ๋ฒ์ผ(bucket)
์ ๋ง๋ค์ด์ ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ์๋ฆฟ์๋ถํฐ ๊ฐ ์๋ฆฟ์์ ๊ฐ์ ๋ฐ๋ผ ๋ฒ์ผ์ ๋ฃ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์์๋ถํฐ ์๋๋ก ์์ฐจ์ ์ผ๋ก ๋ฒ์ผ ์์ ๋ค์ด ์๋ ์ซ์๋ค์ ์ฝ์์ผ๋ก์จ ์ ๋ ฌ๋ ์ซ์ ๋ฆฌ์คํธ๋ฅผ ์ป์ ์ ์๋ค.
# 3. ํน์ง
# 1) ์ฅ์
- ์๋ฆฟ์๊ฐ ๊ณ ์ ๋์ด ์์ด ์์ ์ ์ด๋ค.
- ๋ฐ์ดํฐ ๊ฐ์ ์๋์ ์์๊ฐ ๋ณด์กด๋๋ stable ์ ๋ ฌ์ด๋ค.
- ๋น๊ต์ฐ์ฐ์ ํ์ง ์๋๋ค.
# 2) ๋จ์
- ์๋ฆฟ์๊ฐ ์๋ ๋ฐ์ดํฐ๋ ์ ๋ ฌํ์ง ๋ชปํ๋ค.
- ์ถ๊ฐ์ ์ธ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ๋ค.
# 4. ์๊ฐ๋ณต์ก๋
- ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ์ ์๋ฆฌ ์ ๋งํผ ์์ ํ ์ ๋ ฌ ๊ณผ์ ์ด ๋ฐ๋ณต๋๋ค.
RadixSort(A,d)
for i=1 to d
StableSort(A) on digit i
๋ฐ๋ผ์, T(n) = O(dn)
# 5. ๊ธฐ์ ์ ๋ ฌ Java ์ฝ๋
# ex) ์์
// ๊ธฐ์ ์ ๋ ฌ
import java.io.*;
import java.util.*;
class Radix {
// ๋ฐฐ์ด arr์์ ์ต๋๊ฐ์ ์ป๊ธฐ ์ํ ๋ฉ์๋
static 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;
}
// ๊ฐ ์๋ฆฟ์์ ๊ฐ์ ๋ฐ๋ผ ์ ๋ ฌํ๋ ๋ฉ์๋
static void countSort(int arr[], int n, int exp) {
int output[] = new int[n]; // ๊ฒฐ๊ณผ ๋ฐฐ์ด
int i;
int count[] = new int[10];
Arrays.fill(count,0);
// Store count of occurrences in count[]
for (i = 0; i < n; i++)
count[ (arr[i]/exp)%10 ]++;
for (i = 1; i < 10; i++)
count[i] += count[i - 1];
for (i = n - 1; i >= 0; i--) {
output[count[ (arr[i]/exp)%10 ] - 1] = arr[i];
count[ (arr[i]/exp)%10 ]--;
}
for (i = 0; i < n; i++)
arr[i] = output[i];
}
// ๊ธฐ์ ์ ๋ ฌ
static void radixsort(int arr[], int n) {
// ์ต๋๊ฐ์ ์๋ฆฟ์๋ฅผ ์ฐพ๋๋ค.
int m = getMax(arr, n);
for (int exp = 1; m/exp > 0; exp *= 10)
countSort(arr, n, exp);
}
// ๋ฐฐ์ด์ ์ถ๋ ฅํ๊ธฐ ์ํ ๋ฉ์๋
static void print(int arr[], int n) {
for (int i=0; i<n; i++)
System.out.print(arr[i]+" ");
}
// ๊ธฐ์ ์ ๋ ฌ์ ์คํํ๋ ๋ฉ์ธ
public static void main (String[] args) {
int arr[] = {170, 45, 75, 90, 802, 24, 2, 66};
int n = arr.length;
radixsort(arr, n);
print(arr, n);
}
}
# Reference & Additional Resources
C์ธ์ด๋ก ์ฝ๊ฒ ํ์ด์ด ์๋ฃ ๊ตฌ์กฐ