Tags
- Django
- Queue
- regexp
- 트리
- M:N
- delete
- 통계학
- 그리디
- migrations
- 뷰
- stack
- 쟝고
- Article & User
- 완전검색
- Tree
- 백트래킹
- distinct
- DB
- 이진트리
- count
- create
- SQL
- N:1
- 큐
- Vue
- 스택
- outer join
- update
- drf
- ORM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Notice
Recent Posts
Link
데이터 분석 기술 블로그
삽입 정렬 (Insertion Sort) 본문
삽입 정렬
"각 요소를 적절한 위치에 삽입하며 정렬하는 방식"
- 현재 요소를 앞쪽 정렬된 부분과 비교하여 올바른 위치에 삽입
- 거의 정렬된 데이터에서 빠르게 동작(O(n))하지만, 일반적으로 비효율적(O(n²))
삽입 정렬 동작 원리
- 첫 번째 요소는 이미 정렬된 상태로 간주
- 두 번째 요소를 앞쪽 정렬된 부분과 비교하여 적절한 위치에 삽입
- 세 번째 요소도 앞쪽 정렬된 부분과 비교하여 삽입
- 이 과정을 마지막 요소까지 반복
# Pseudo Code
FUNCTION InsertionSort(arr)
FOR i FROM 1 TO length(arr) - 1
key = arr[i]
j = i - 1
WHILE j >= 0 AND arr[j] > key DO
arr[j + 1] = arr[j]
j = j - 1
END WHILE
arr[j + 1] = key
END FOR
RETURN arr
END FUNCTION
# Full Code
def insertion_sort(arr):
n = len(arr)
for i in range(1, n): # 두 번째 요소부터 시작
key = arr[i] # 현재 비교할 요소 저장
j = i - 1
while j >= 0 and arr[j] > key: # 앞쪽 요소와 비교하며 이동
arr[j + 1] = arr[j] # 한 칸씩 이동
j -= 1
arr[j + 1] = key # 올바른 위치에 삽입
return arr
# 테스트
arr = [5, 3, 8, 4, 2]
print("삽입 정렬 결과:", insertion_sort(arr))
삽입 정렬의 시간복잡도
경우 | 시간복잡도 |
최선 (이미 정렬됨) | O(n) |
평균 | O(n²) |
최악 (역순 정렬) | O(n²) |
✅ 거의 정렬된 데이터에서는 O(n) → 매우 빠름!
❌ 랜덤 데이터에서는 O(n²) → 비효율적!
삽입 정렬의 장단점
장점
- 거의 정렬된 데이터에서는 O(n)으로 매우 빠름
- 추가 메모리 필요 없음(O(1))
- 실시간으로 데이터가 들어올 때 유용 (온라인 정렬)
단점
- 일반적인 정렬에서는 O(n²)로 비효율적
- 큰 데이터셋에서는 퀵 정렬(O(n log n))이 훨씬 빠름
결론
삽입 정렬은 거의 정렬된 데이터에서 빠르고, 실시간 정렬에 유용하지만, 일반적인 정렬에는 퀵 정렬(O(n log n))이나 병합 정렬(O(n log n))이 더 적합합니다.
'데이터 사이언스 > 알고리즘' 카테고리의 다른 글
Stack Overflow (0) | 2025.02.14 |
---|---|
퀵 정렬 (Quick Sort) (0) | 2025.02.13 |
선택 정렬 (Selection Sort) (0) | 2025.02.11 |
버블 정렬 (Bubble Sort) (0) | 2025.02.10 |
시간복잡도 & 공간복잡도 (0) | 2025.02.09 |