728x90
기수 정렬 (Radix Sort)
기수 정렬은 비교하지 않는 정렬 알고리즘으로 낮은 자릿수부터 정렬을 수행.
- 숫자별로 버킷(bucket)이라는 queue를 생성
- 정렬하려는 숫자들의 각 자릿수에 해당하는 숫자를 각각의 버킷에 넣어 정렬
- 이를 자릿수만큼 반복한다.
단점
- 버킷을 구성하기 위한 추가 메모리가 필요
- 정렬할 수 있는 데이터 타입이 한정적
예시
- 숫자 배열 [73, 21, 56, 13, 16, 35, 41, 69]를 기수 정렬을 이용해 오름차순으로 정렬하는 과정
-
73 21 56 13 16 35 41 69
-
- 버킷
-
0 1 2 3 4 5 6 7 8 9
-
- 버킷
-
41
2113
7335 16
5669 0 1 2 3 4 5 6 7 8 9
-
-
-
21 41 73 13 35 56 16 69
-
- 버킷
-
16
1321 35 41 56 69 73 0 1 2 3 4 5 6 7 8 9
-
-
-
13 16 21 35 41 56 69 73
-
시간 복잡도 : O(dn) * 데이터 개수 : n, 최대 자릿수 : d
def radix_sort(arr):
RADIX = 10
placement = 1
max_digit = max(arr)
while placement < max_digit:
buckets = [list() for _ in range(RADIX)]
for i in arr:
tmp = int((i / placement) % RADIX)
buckets[tmp].append(i)
a = 0
for b in range(RADIX):
buck = buckets[b]
for i in buck:
arr[a] = i
a += 1
placement *= RADIX
return arr
728x90
'Tech > Algorithm' 카테고리의 다른 글
[Algorithm] 깊이 우선 탐색 (DFS) & 너비 우선 탐색 (BFS) (0) | 2025.03.19 |
---|---|
[Algorithm] 계수 정렬 (Counting Sort) (0) | 2025.03.18 |
[Algorithm] 병합 정렬 (Merge Sort) (0) | 2025.03.17 |
[Algorithm] 퀵 정렬 (Quick Sort) (0) | 2025.03.17 |
[Algorithm] 삽입 정렬 (Insertion Sort) (0) | 2025.03.17 |