[java] 쉘 정렬 알고리즘

쉘 정렬(Shell Sort)은 배열을 정렬하는 효율적인 알고리즘 중 하나로, 삽입 정렬(Insertion Sort)을 개선한 것이다. 이 알고리즘은 Donal Shell에 의해 처음으로 제안되어서 쉘 정렬로 불린다.

쉘 정렬은 배열을 여러 개의 서브 배열로 분할하고 각 서브 배열을 삽입 정렬을 사용해 정렬한다. 그런 다음 전체 배열에 대해 다시 한 번 삽입 정렬을 적용한다. 이렇게 하면 배열이 일정 정도로 정렬되어 있기 때문에 삽입 정렬을 수행하는데 효율적이다.

쉘 정렬 알고리즘의 구현 예시

다음은 Java로 작성된 쉘 정렬의 간단한 구현 예시이다.

public class ShellSort {
    public static void sort(int[] arr) {
        int n = arr.length;
        
        for (int gap = n / 2; gap > 0; gap /= 2) {
            for (int i = gap; i < n; i++) {
                int temp = arr[i];
                int j;
                for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
                    arr[j] = arr[j - gap];
                }
                arr[j] = temp;
            }
        }
    }
}

위의 코드에서 sort 메서드는 쉘 정렬을 수행한다. 배열을 적절한 간격으로 나누어 삽입 정렬을 수행하는 방식으로 동작한다.

요약

쉘 정렬 알고리즘은 배열을 여러 개의 서브 배열로 분할하고 각 서브 배열을 삽입 정렬을 사용해 정렬한 후, 전체 배열에 대해 다시 한 번 삽입 정렬을 적용하여 효율적으로 정렬하는 알고리즘이다.

참고 자료