코드 구현

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public void Radix_Sort(int[] data)
{
int maxsize = getMaxlength(data);
ArrayList<Linear_Queue> bucket = new ArrayList();
int powed=1;
int index = 0;
 
for(int i=0;i<10;i++) //버킷 생성
{
bucket.add(new Linear_Queue(10));
}
 
for(int i=1;i<=maxsize;i++) //자리수가 가장 큰 수만큼 전체 반복문을 반복합니다.
{
for(int j=0;j<data.length;j++)
{
bucket.get((data[j]/powed)%10).EnQueue(data[j]); //각 자리수의 맞는 index의 bucket에 넣습니다.
}
for(int k=0;k<10;k++) //버킷에서 데이터를 가지고옵니다.
{
int bucket_num = bucket.get(k).rear;
 
for(int n=0;n<=bucket_num;n++)
{
data[index] = bucket.get(k).DeQueue();
index++;
}
}
index =0;
powed *=10;
}
}
public int getMaxlength(int[] data)
{
int maxsize = 0;
for(int i=0;i<data.length;i++)
{
int length = (int)Math.log10((double)data[i])+1;
if(maxsize <length)
{
maxsize = length;
}
}
return maxsize; //가장 큰 자리수를 반환합니다.
}
}
 

 

다음 소스는 Queue 자료 구조 Class입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Linear_Queue {
 
int rear = -1;
int front = 0;
int maxsize = 0;
int[] Linear_Queue;
 
public Linear_Queue(int maxsize)
{
this.maxsize = maxsize;
Linear_Queue = new int[maxsize];
}
 
public void EnQueue(int num)
{
if(rear != maxsize-1)
{
Linear_Queue[++rear] = num;
}
else
{
System.out.println("데이터 다참");
}
}
 
public int DeQueue()
{
if(rear!=front || (rear==0 && front==0))
{
int tmp =Linear_Queue[front];
for(int i=1;i<=rear;i++)
{
Linear_Queue[i-1] = Linear_Queue[i];
}
rear--;
return tmp;
}
else
{
return -1;
}
}
}