[python] 셸 정렬

셸 정렬은 삽입 정렬의 한 변형으로, 먼 거리의 숫자들을 미리 다른 배열에 삽입하고, 그 배열을 삽입 정렬하는 방식입니다. 이러한 과정을 반복하여 정렬을 수행합니다. 삽입 정렬보다 더욱 효율적인 정렬 알고리즘 중 하나로 알려져 있습니다.

알고리즘 설명

  1. 먼 거리(h)를 정하여 배열을 h 간격으로 나눕니다.
  2. 각 부분 배열에 대해 삽입 정렬을 수행합니다.
  3. h 값을 줄여가며 1~2 단계를 반복합니다.
  4. 최종적으로 h값이 1일 때 전체 배열에 대해 삽입 정렬을 수행하여 최종적으로 정렬을 완료합니다.

예시 코드

def shell_sort(arr):
    n = len(arr)
    gap = n // 2

    while gap > 0:
        for i in range(gap, n):
            temp = arr[i]
            j = i
            while j >= gap and arr[j - gap] > temp:
                arr[j] = arr[j - gap]
                j -= gap
            arr[j] = temp

        gap //= 2

    return arr

# 예시 실행
arr = [9, 5, 1, 8, 2, 7, 3]
sorted_arr = shell_sort(arr)
print(sorted_arr)

위의 코드는 Python으로 구현한 셸 정렬의 예시입니다.

시간 복잡도

셸 정렬의 시간 복잡도는 O(n^2)입니다. 하지만 삽입 정렬과 비교하여 비교 횟수가 줄어들어 효율적으로 작동하는 특징이 있습니다.

결론

셸 정렬은 삽입 정렬의 성능을 개선한 정렬 알고리즘입니다. 이해하기 쉽고 구현하기도 비교적 쉬운 알고리즘이며, 일반적인 정렬 문제에 효과적으로 사용될 수 있습니다.


참고 문헌: