개요
- 정수 정렬 알고리즘 : 정수 key에 따라 객체를 수집하는 것
- 정수의 개수를 세는 방식으로 동작
특징
- 시간복잡도 : O(n+k) (k is the range of non-neg key values)
- 공간복잡도 : O(n+k)
- 정수의 범위가 제한적일 때 가장 효율적으로 작동한다.
구현
import java.util.Arrays;
public class CountingSort {
public static void main(String[] args) {
int[] arr = {77, 32, 37, 17, 22, 8, 13, 42, 26};
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int num : arr) {
min = Math.min(min, num);
max = Math.max(max, num);
}
int[] count = new int[max - min + 1];
for (int num : arr) {
count[num - min]++;
}
for (int i = 1; i < count.length; i++) {
count[i] += count[i - 1];
}
int[] sortedArr = new int[arr.length];
for (int i = arr.length - 1; i >= 0; i--) {
int num = arr[i];
int index = count[num - min] - 1;
sortedArr[index] = num;
count[num - min]--;
}
System.out.println(Arrays.toString(sortedArr));
}
}