#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 20

//큐 구조체
typedef struct{
        int element[MAX]; //각 버킷은 20개의 원소를 담음
        int rear;
        int front;
} queue;       
       
void radixsort(int a[], int n, int k); //기수 정렬 함수
int digit(int a[], int j, int i); // a배열의 i번째 자리의 수를 반환하는 함수
void enque(queue *que, int d, int a[], int j);
int deque(queue *que, int j);

int main(){
   
    int n=0,t=0;
    scanf("%d",&n);//원소의 개수 입력
    getchar();
    scanf("%d",&t);//최대 자릿수 입력
    int a[n]; // 임의의 원소를 받을 배열
   
    for(int i=0; i<n;i++)
        scanf("%d",&a[i]);            
    printf("\n");
   
    radixsort(a,n,t); //기수 정렬 호출
   
    printf("\n");
    system("PAUSE");
    return 0;
}

void radixsort(int a[],int n,int k){
     int d=0;
     queue que[10]; // 0~9를 담을 버킷을 설정
    
    
    
     //기수정렬 시작 자릿수k만큼 반복한다.
     for(int i=1;i<=k;i++){
        
         //각 queue를 비어있는상태로 초기화 front==rear이면 큐는 비어있는 상태
         for(int x=0;x<9;x++){
         que[x].front=-1;
         que[x].rear=-1;
         }
        
         for(int j=0;j<n;j++){
             d = digit(a,j,i);
             enque(que,d,a,j);
         }
         int p=0;
         //큐에 담긴 원소들을 다시 정렬된 형태로 배열 a에 옮긴다. 
         for(int j=0;j<=9;j++){
             while( que[j].rear != que[j].front ) //큐가 비워질때까지....
                   a[p++] = deque(que,j);
         }
         for(int i=0; i<n;i++){
             printf("%d ",a[i]); //각 자릿수에 의해 정렬된 원소의 출력         
         }
         printf("\n");
     }                                         
}

int digit(int a[], int j, int i){ // a배열의 i번째 자리의 수를 반환하는 함수
    int digit = 0;
        digit = (int)(a[j]/pow(10,i-1));
    return digit;
}

void enque(queue *que, int d, int a[], int j){
     que[d].rear++;
     int x=que[d].rear;
     que[d].element[x] = a[j];   
}

int deque(queue *que, int j){
    que[j].front++;
    return que[j].element[que[j].front];   
}

프로그램이 돌다가 죽습니다.ㅠㅠ


우선 원소의 개수와 최대자릿수를 입력합니다. 만약 최대 자리수가 4이면 천의 자리 숫자겠죠

그리고 임의의 숫자를 scanf를 통하여 입력합니다.

그상태에서 기수정렬함수를 호출하고 그 안에서 큐를  생성합니다. 큐는 0~9를 담습니다.(물론 큐는 비어있는 상태로 초기화)

우선 k가 1부터 t까지 돕니다 digit()함수를 통해 각 인덱스값의 1의 자리 숫자를 구하고 

큐(버킷)에 담습니다. 1의 자리에 대해서 모든 배열a의 원소들이 큐에 들어갑니다. 

큐에서 차례차례 빼내어 그값들을 원래 배열 a에 담고 출력합니다.

그것을 최대자리t까지 반복하고 나면 배열은 오름차순으로 정렬됩니다.


혹시 코드 읽으시는데 불편하실까봐 구동 설명은 했습니다.

원소의 개수와 최대자리수를 입력하고 임의의 숫자를 원소의 개수만큼 입력하고 enter를 치면

프로그램이 죽습니다. 분명 radixsort()함수부터 문제가 있는거 같은데 프로그램이 돌다가 죽으니까

도대체 원인도 모르겠고 코드를 처음부터 읽어봐도 잘 모르겟어서 갤에 올립니다.

제발 부탁드립니다.