기수정렬 ( Radix Sort )

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

[예시]

Untitled

Untitled

성능

구현 ( 수업에선 안다룸 )

#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);
}

버킷정렬( Bucket Sort )