기수 정렬은 기수 별로 비교 없이 수행하는 정렬 알고리즘이다. 기수로는 정수, 낱말, 천공카드 등 다양한 자료를 사용할 수 있으나 크기가 유한하고 사전순으로 정렬할 수 있어야 한다. 버킷 정렬의 일종으로 취급되기도 한다. 위키백과
[예시]


#include <stdio.h>
#define MAX 20
// QUEUE
int queue[MAX];
int front, rear = 0;
int put(int k){
if((rear+1) % MAX == front){
printf("QUEUE OVER FLOW!\\n\\n");
return -1;
}else{
queue[rear] = k;
rear = ++rear % MAX;
return 1;
}
}
int get(){
int k;
if(front == rear){
printf("QUEUE UNDER FLOW!\\n\\n");
return -1;
}else{
k = queue[front];
front = ++front % MAX;
return k;
}
}
void radix_sort(int array[], int size){
int max = array[0];
int digit = 0;
int factor = 1;
for(int i=1; i<size; i++){
if(max<array[i]) max = array[i];
}
for(int i=max; i>0;i/=10){
digit++;
}
for(int i =0; i<digit; i++){
for(int j=0; j<10; j++){ // 0~9
for(int k=0; k<size; k++){
if((array[k]/factor)%10==j){
put(array[k]);
}
}
}
factor *=10;
for(int i=front; i!=rear; i++){
array[i] =get();
}
printf("########### %d ROUND ###########\\n",i+1);
print_array(array,size);
front=rear=0;
}
}
void main(){
int array[] = {11,1,83,202,55,4,119,81,15,47,19,28};
int size = sizeof(array)/sizeof(int);
radix_sort(array, size);
}