08.개발&프로그래밍/1.파이썬
10. 파이썬 기초 알고리즘: 정렬 & 탐색 구현
JWJ Family
2025. 7. 12. 16:47
728x90
Bubble, Selection, Insertion, Merge, Quick 정렬 알고리즘과 선형/이진 탐색 구현을 예제와 시간 복잡도 해설과 함께 정리했습니다.
1. Bubble Sort (버블 정렬)
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
data = [5,1,4,2,8]
bubble_sort(data)
print(data) # [1,2,4,5,8]
O(n²) 시간 복잡도지만 개념이 단순해 학습용으로 자주 사용됩니다.
2. Selection Sort (선택 정렬)
def selection_sort(arr):
for i in range(len(arr)):
min_idx = i
for j in range(i+1, len(arr)):
if arr[j] < arr[min_idx]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
매 단계에서 최소값을 선택해 O(n²)의 시간 복잡도를 가집니다.
3. Insertion Sort (삽입 정렬)
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >= 0 and arr[j] > key:
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
대체로 O(n²)이지만, 이미 정렬된 배열에 대해서는 O(n) 성능을 가집니다.
4. Merge Sort (병합 정렬)
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr)//2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
merged = []
i = j = 0
while i < len(left) and j < len(right):
merged.append(left[i] if left[i] < right[j] else right[j])
i += left[i] < right[j]
j += left[i] >= right[j]
merged += left[i:] + right[j:]
return merged
O(n log n) 안정 정렬이며 큰 데이터 처리에 유용한 병합 기반 알고리즘입니다.
5. Quick Sort (퀵 정렬)
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr)//2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
평균 O(n log n), 최악 O(n²)이며, Python 표준 정렬의 핵심 아이디어입니다.
6. Linear & Binary Search (선형 탐색 및 이진 탐색)
def linear_search(arr, target):
for i, v in enumerate(arr):
if v == target:
return i
return -1
def binary_search(arr, target):
low, high = 0, len(arr)-1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
선형 탐색은 O(n), 이진 탐색은 정렬된 리스트에서 O(log n)입니다.
요약
- **Bubble / Selection / Insertion Sort**: 이해하기 쉬우나 O(n²) 시간 복잡도
- **Merge / Quick Sort**: 평균 O(n log n) 효율적인 정렬 알고리즘
- **Linear Search**: 순차 탐색 O(n)
- **Binary Search**: 정렬된 배열에서 O(log n) 탐색
2부의 마지막 글로, 이번 편에서는 파이썬에서 가장 많이 사용되는 기초 알고리즘을 정리했습니다. 이번 글을 통해 정렬과 탐색의 원리와 구현 방식을 이해하셨길 바랍니다.
반응형