private static void radixSort(int[] arr) {
//최대값 구하기
int max = arr[0];
for(int i = 1; i < arr.length; i++) {
if(max < arr[i])
max = arr[i];
}
//Counting Sort를 사용하여 해당 자리 정렬하기
for(int digit = 1; digit <= max; digit *= 10){
countingSort(arr, digit);
}
}
private static void countingSort(int[] arr, int digit) {
int[] temp = new int[N];
int[] counting = new int[N];
for(int i = 0; i < N; i++) {
int num = (arr[i] / digit) % 10; //해당 자리수의 숫자 추출
counting[num]++;
}
//누적합 배열로 만들기
for(int i = 1; i < counting.length; i++) {
counting[i] ++ counting[i - 1];
}
//뒤에서부터 시작 == 값이 큰것이 뒤로
for(int i = 0; i < N; i++) {
int num = (arr[i] / digit) % 10;
int index = counting[num];
temp[index - 1] = arr[i];
counting[num]--;
}
//복사
for(int i = 0; i < N; i++) {
arr[i] = temp[i];
}
}
-장점
-단점
O(N)