O(nLogn)
인데, 이에 반해 counting sort는 O(n)
으로 속도가 빠른 알고리즘이다.// array = 정렬할 배열
// maxValue = 최대값
public static int[] countingSort(int[] array, int maxValue) {
int[] countArray = new int[maxValue + 1]; // 카운트 저장할 배열
int[] sortedArray = new int[array.length]; // 정렬된 배열
// 정렬할 배열의 각 원소값을 count 한다.
for(int value : array) {
countArray[value]++;
}
// 카운트된 값들의 누적합을 다시 계산해준다.
for(int i=1; i < countArray.length; i++) {
countArray[i] += countArray[i - 1];
}
// 정렬할 배열의 해당 원소의 카운트된 값을 sortedArray의 인덱스에 넣어준다.
for(int i=array.length - 1; i >= 0; i--) {
sortedArray[--countArray[array[i]]] = array[i];
}
return sortedArray;
}
백준 관련 문제
https://velog.io/@dayoung_sarah/백준-2751번-수-정렬하기2Java