삽입 정렬 (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.