낮은 자리수부터 비교하여 정렬해 간다는 것을 기본 개념으로 하는 정렬 알고리즘.
기수 정렬은 비교 연산을 하지 않으며 정렬 속도가 빠르지만 데이터 전체 크기에 기수 테이블의 크기만한 메모리가 더 필요하다.
가장 작은 자릿수부터 정렬을 진행 (숫자로 치면 일의 자리수부터)
가장 작은 자릿수부터 큰 자릿수까지 비교해야 한다는 단점이 있지만, 코드 구현이 MSD에 비해 간결하다
가장 큰 자릿수부터 정렬을 진행
LSD와 비교했을 때 정렬 상태 확인등의 추가 작업이 필요하지만, 중간에 정렬이 완료될 수 있다는 장점이 있다
from collections import deque
def radix_sort(nums):
buckets = [deque() for _ in range(10)]
max_val = max(nums)
Q = deque(nums)
cur_ten = 1
while max_val >= cur_ten:
while Q:
num = Q.popleft()
buckets[(num // cur_ten) % 10].append(num)
for bucket in buckets:
while bucket:
Q.append(bucket.popleft())
cur_ten *= 10
return list(Q)
print(radix_sort([15, 27, 64, 25, 50, 17, 39, 28]))
- for-루프가 k번 반복
- k는 입력의 최대 자릿수- 루프가 1회 수행될 때 n개의 숫자의 i자리 수를 읽으며, r개로 분류하여 개수를 세고, 그 결과에 따라 숫자가 이동하므로 O(n+r) 시간 소요
https://herong.tistory.com/entry/%EA%B8%B0%EC%88%98%EC%A0%95%EB%A0%ACRidix-Sort
https://week-year.tistory.com/206