삽입 정렬 (Insertion Sort) 및 쉘 정렬 (shell Sort)
기본 정렬 알고리즘 [삽입 정렬(insertion-sort) 및 쉘 정렬(shell-sort)]
목차
삽입 정렬 (Insertion Sort)
정의
삽입 정렬은 각 요소를 이미 정렬된 배열 부분에 적절한 위치에 삽입하는 방식으로 작동하는 정렬 방법입니다.
작동 원리
- 두 번째 요소부터 시작하여, 해당 요소를 그 이전의 요소들과 비교합니다.
 - 요소가 이전의 요소보다 작으면, 그 요소의 앞으로 이동합니다.
 - 이 과정을 모든 요소에 대해 반복합니다.
 - 배열의 모든 요소가 올바른 순서로 정렬될 때까지 이 과정을 반복합니다.
 
알고리즘 복잡도
- 최악의 경우 시간 복잡도: O(n^2)
 - 최선의 경우 시간 복잡도: O(n)
 - 평균 시간 복잡도: O(n^2)
 - 공간 복잡도: O(1)
 
예시 코드
1
2
3
4
5
6
7
8
9
def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        while j >= 0 and key < arr[j] :
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key
    return arr
쉘 정렬 (Shell Sort)
정의
쉘 정렬은 삽입 정렬을 개선한 버전으로, 배열을 간격별로 나누어 삽입 정렬을 수행합니다. 이 간격은 점차 줄어들며, 마지막에는 일반 삽입 정렬을 수행합니다.
작동 원리
- 초기 간격 
gap을 설정합니다 (예: 배열 길이의 절반). gap만큼 떨어진 요소들에 대해 삽입 정렬을 수행합니다.gap의 크기를 줄여가며 위의 과정을 반복합니다.gap이 1이 되면, 일반 삽입 정렬을 수행합니다.
알고리즘 복잡도
- 평균 및 최악의 경우 시간 복잡도: O(n^1.5) (간격에 따라 다름)
 
예시 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
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
 This post is licensed under  CC BY 4.0  by the author.
Comments powered by Disqus.