본문 바로가기

Algorithm/C. Sortings & Search

35. Radix Sort

기수 정렬(Radix Sort)은 자릿수가 있는 데이터를 정렬할 수 있는 방법으로, 가장 낮은 자리부터 시작해서 각각의 자리값을 기준으로 한 번씩 정렬을 실행한다. 이 과정이 끝나면 전체 데이터를 정렬할 수 있게 된다.

 

다음과 같은 데이터가 있을 때,

 

[811, 310, 659, 156, 27, 230, 384, 905, 422, 513, 324]

 

기수 정렬을 이용해 이 값들을 오름차순으로 정렬한다고 하면 다음과 같은 과정을 거치게 된다. 먼저 일의 자리를 기준으로 값들을 분류한다.

 

[811]

[310, 230]

[659]

[156]

[27]

[384, 324]

[905]

[422]

[513]

 

이 값들을 일의 자리 수가 작은 순서대로 모두 이어붙인다.

 

[310, 230, 811, 422, 513, 384, 324, 905, 156, 27, 659]

 

다음으로 이 값들을 십의 자리를 기준으로 분류한다. 이때 같은 묶음 내에서 원소의 상대적인 순서가 유지되어야 한다.

 

[310, 811, 513]

[230]

[422, 324, 27]

[384]

[905]

[156, 659]

 

이 값들을 십의 자리 수가 작은 순서대로 모두 이어붙인다.

 

[905, 310, 811, 513, 422, 324, 27, 230, 156, 659, 384]

 

다음으로 이 값들을 백의 자리를 기준으로 분류한다.

 

[905]

[310, 324, 384]

[811]

[513]

[422]

[27]

[230]

[156]

[659]

 

이 값들을 백의 자리 수가 작은 순서대로 모두 이어붙인다.

 

[27, 156, 230, 310, 324, 384, 422, 513, 659, 811, 905]

 

천의 자리 이상은 모두 $0$이므로 정렬이 완료되었다. 여기서는 십진법을 기준으로 자리수를 정했지만 다른 기수법을 사용해서 정렬할 수도 있다.

 

다음은 기수 정렬 과정을 시각화한 것이다.

데이터의 최대 자리수가 $k$일 때 기수 정렬의 시간복잡도는 $\Theta(kn)$이며 $k$를 상수로 취급하면 $\Theta(n)$의 시간복잡도가 나오게 된다. 하지만 메모리 사용량이 많고, 문자열이나 실수를 정렬할 때는 성능이 떨어진다는 단점이 존재한다.

 

→ solved.ac tag: sorting

'Algorithm > C. Sortings & Search' 카테고리의 다른 글

37. Linear Search  (0) 2021.04.12
36. Other Sorting Method  (0) 2021.03.28
34. Counting Sort  (0) 2021.03.01
33. Heap Sort  (0) 2021.02.28
32. Quick Sort  (0) 2021.02.28