[java] 자바에서 기수 정렬 구현하기

기수 정렬은 정수를 자릿수 별로 비교하여 정렬하는 알고리즘입니다. 이 알고리즘은 정수의 자릿수를 기준으로 정렬하기 때문에 특히 정수 배열을 정렬하는 데 유용합니다.

기수 정렬 알고리즘 개요

기수 정렬 알고리즘은 일반적으로 다음과 같은 단계로 구성됩니다:

  1. 주어진 리스트의 가장 낮은 자릿수부터 가장 높은 자릿수까지 순차적으로 정렬합니다.
  2. 각 자릿수에 대해 해당하는 버킷에 값을 넣어 정렬하여 새로운 리스트를 생성합니다.
  3. 가장 높은 자릿수까지 정렬을 마칠 때까지 반복합니다.

자바를 이용한 기수 정렬 구현

다음은 자바를 이용한 간단한 기수 정렬의 구현 예시입니다.

import java.util.*;

public class RadixSort {
    public static void radixSort(int[] arr) {
        int max = Arrays.stream(arr).max().getAsInt();
        for (int exp = 1; max / exp > 0; exp *= 10) {
            countingSort(arr, exp);
        }
    }

    private static void countingSort(int[] arr, int exp) {
        int[] output = new int[arr.length];
        int[] count = new int[10];
        Arrays.fill(count, 0);

        for (int value : arr) {
            count[(value / exp) % 10]++;
        }

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

        for (int i = arr.length - 1; i >= 0; i--) {
            output[count[(arr[i] / exp) % 10] - 1] = arr[i];
            count[(arr[i] / exp) % 10]--;
        }

        System.arraycopy(output, 0, arr, 0, arr.length);
    }

    public static void main(String[] args) {
        int[] arr = {170, 45, 75, 90, 802, 24, 2, 66};
        radixSort(arr);
        System.out.println("Sorted array: " + Arrays.toString(arr));
    }
}

위의 코드에서 radixSort 메서드는 기수 정렬 알고리즘을 구현하고, countingSort 메서드는 각 자릿수에 대해 카운팅 정렬을 수행합니다.

이 구현을 사용하면 radixSort 메서드를 호출하여 정렬되지 않은 정수 배열을 정렬할 수 있습니다.

결론

자바를 사용하여 기수 정렬을 구현하고 사용하는 방법에 대해 배웠습니다. 기수 정렬은 자릿수 기반의 정렬 알고리즘이므로 특히 정수 배열의 정렬에 효과적입니다.

기수 정렬의 구체적인 구현 방법 및 원리에 대해 더 알고 싶다면 다양한 자료와 책을 참고하는 것이 좋습니다.

자세한 내용은 GeeksforGeeks에서 확인할 수 있습니다.