public class CountingSort {
public static void main(String[] args) {
int[] array = new int[100];
int[] counting = new int[31];
int[] result = new int[100];
for(int i = 0; i < array.length; i++) {
array[i] = (int)(Math.random()*31);
}
//Counting Sort
for(int i = 0; i < array.length; i++){
//array의 value값을 index로 하는 counting배열 값 1 증가
counting[array[i]]++;
}
//누적합 계산
for(int i = 1; i < counting.length; i++) {
counting[i] += counting[i - 1];
}
//i번째 원소를 인덱스로 하는 counting배열을 1감소시킨 뒤
//counting배열의 값을 인덱스로 하여 result에 value값을 저장한다.
for(int i = array.length - 1; i >= 0; i--) {
int value = array[i];
counting[value]--;
result[counting[value]] = value;
}
}
-장점
-단점
O(N)