[java] 계수 정렬 알고리즘의 최선/최악/평균 시간 복잡도

계수 정렬(Counting Sort)은 정렬 알고리즘 중에서 가장 빠른 속도를 자랑하는 알고리즘 중 하나입니다. 이 알고리즘은 정렬 대상의 값 범위가 제한적일 때 사용하기에 적합하며, 주어진 데이터에 대해 특정한 조건이 만족될 때 효과적으로 작동합니다.

최선/최악/평균 시간 복잡도

계수 정렬 알고리즘은 입력값에 비례하는 추가적인 공간을 사용하여 선형 시간 복잡도를 가집니다. 따라서, 최선/최악/평균 시간 복잡도는 O(n + k)로 표현됩니다.

여기서 n은 배열의 크기이고, k는 배열 내 최댓값과 최솟값의 차이입니다.

이 때문에 계수 정렬은 일반적으로 다른 정렬 알고리즘들보다 훨씬 빠르게 동작하는 편입니다.

예시 코드

public class CountingSort {
    public static void countingSort(int[] arr, int maxValue) {
        int[] count = new int[maxValue + 1];
        int[] sortedArr = new int[arr.length];

        for (int i = 0; i < arr.length; i++) {
            count[arr[i]]++;
        }

        for (int i = 1; i <= maxValue; i++) {
            count[i] += count[i - 1];
        }

        for (int i = arr.length - 1; i >= 0; i--) {
            sortedArr[count[arr[i]] - 1] = arr[i];
            count[arr[i]]--;
        }

        for (int i = 0; i < arr.length; i++) {
            arr[i] = sortedArr[i];
        }
    }
}

계수 정렬 알고리즘의 시간 복잡도에 대한 좀 더 자세한 정보는 Counting Sort - GeeksforGeeks에서 확인할 수 있습니다.