본문 바로가기
::public/알고리즘

기수 정렬(Radix Sort)

by 해맑은욱 2019. 9. 6.

버킷 정렬(bucket sort)라고도 함. 먼저 들어간 숫자들이 먼저 나와야함.(queue)

숫자의 자릿수 값을 비교하는 정렬.

 

LSD(least significant digit)

;가장 낮은 자릿수부터

MSD(most significant digit)

;가장 높은 자릿수부터

 

시간복잡도

k개의 자릿수를 가지기에 O(kn) 이지만

일반적으로 O(n) 로 표현.

#include <queue>
 
#define BUCKETS   10   // 10진수
#define DIGITS    4    // 4자릿수 테스트
void radizSort(int arr[], int n)
{
    queue<int> que[BUCKETS];
    int factor = 1;    
    for (int d = 0; d < DIGITS; d++)
    {
        int i;
        for (i = 0; i < n; i++)    // 데이터들을 자릿수에 따라 큐에 삽입
        {
            que[(arr[i] / factor) % 10].push(arr[i]);
        }
 
        for (int b = i = 0; b < BUCKETS; b++)
        {
            while (!que[b].empty())    // 버킷에서 꺼내어 arr로 합친다.
            {
                arr[i++= que[b].front();
                que[b].pop();
            }                
        }
        factor *= 10;    // 그 다음 자릿수로 간다(1 > 10 > 100 ... n)
    }
}
 
void test()
{
    int arr[] = {418467633465009169572414789358696244645705};
    radizSort(arr, 11);
    
    // 41 1478 4464 5705 5724 6334 6500 6962 8467 9169 9358 출력
}
cs

'::public > 알고리즘' 카테고리의 다른 글

DFS(깊이 우선 탐색) & BFS(너비 우선 탐색)  (0) 2023.08.17
탐색  (0) 2019.09.06
BinaryTree 구현.  (0) 2019.08.23
퀵 정렬(Quick Sort)  (0) 2019.07.11
알고리즘 시간 복잡도  (0) 2019.06.26