yhimsdokdo
파이썬으로 배우는 정렬 및 탐색 알고리즘의 기초 본문
정렬과 탐색 기초 알고리즘을 Python으로 구현
파이썬은 배울 수 있는 많은 프로그래밍 언어 중 하나로, 그 간결함과 강력함 덕분에 많은 초보자들이 처음 배우기 좋은 언어로 인식되고 있습니다. 본 글에서는 정렬과 탐색의 기초 알고리즘을 파이썬으로 구현하는 방법에 대해 알아보고, 이를 통해 알고리즘의 기초적인 개념을 이해할 수 있도록 하겠습니다.
정렬 알고리즘의 개요
정렬 알고리즘은 주어진 데이터를 특정한 기준에 따라 나열하는 알고리즘을 말합니다. 데이터베이스, 데이터 분석, 검색 알고리즘 등 여러 분야에서 활용됩니다. 정렬 알고리즘의 종류는 여러 가지가 있으며, 대표적인 정렬 알고리즘은 다음과 같습니다.
- 버블 정렬 (Bubble Sort)
- 선택 정렬 (Selection Sort)
- 삽입 정렬 (Insertion Sort)
- 병합 정렬 (Merge Sort)
- 퀵 정렬 (Quick Sort)
버블 정렬 (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]
return arr
선택 정렬 (Selection Sort)
선택 정렬은 배열을 여러 부분으로 나누어 최소값을 찾아 해당 부분의 시작 위치와 교환하는 방식으로 정렬하는 알고리즘입니다. 이 방식은 간단하지만, 시간 복잡도가 O(n^2)으로 비효율적일 수 있습니다.
선택 정렬 구현
def selection_sort(arr):
n = len(arr)
for i in range(n):
min_idx = i
for j in range(i+1, n):
if arr[j] < arr[min_idx]:
min_idx = j
arr[i], arr[minidx] = arr[minidx], arr[i]
return arr
삽입 정렬 (Insertion Sort)
삽입 정렬은 정렬되지 않은 배열을 기준으로 왼쪽에 이미 정렬된 배열과 가상의 기준으로 나누고, 오른쪽의 값을 왼쪽 정렬된 배열에 알맞은 위치에 넣는 방식으로 정렬합니다. 이 방법 또한 O(n^2)의 시간 복잡도를 가집니다.
삽입 정렬 구현
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
탐색 알고리즘의 개요
탐색 알고리즘은 데이터 구조 내에서 특정 데이터를 찾는 알고리즘입니다. 이 또한 다양한 방식이 존재하며, 대표적인 탐색 알고리즘은 다음과 같습니다.
- 선형 탐색 (Linear Search)
- 이진 탐색 (Binary Search)
선형 탐색 (Linear Search)
선형 탐색은 리스트에 포함된 항목들을 시작부터 끝까지 하나씩 비교하여 특정 데이터를 찾는 가장 단순한 접근 방식입니다. 리스트의 크기가 커질수록 비효율적일 수 있습니다.
선형 탐색 구현
def linear_search(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i
return -1
이진 탐색 (Binary Search)
이진 탐색은 정렬된 데이터에서 중간 값을 기준으로, 찾고자 하는 값이 중간 값보다 큰지 작은지를 판단하여 탐색 범위를 절반으로 줄여 가는 방식입니다. 이 방법의 시간 복잡도는 O(log n)으로 매우 효율적입니다.
이진 탐색 구현
def binary_search(arr, target):
left, right = 0, len(arr)
- 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid
- 1
return -1
정렬과 탐색 알고리즘의 성능 비교
알고리즘 | 시간 복잡도 (최악 경우) | 공간 복잡도 | 설명 |
---|---|---|---|
버블 정렬 | O(n^2) | O(1) | 단순한 인접 요소 비교를 통한 정렬. |
선택 정렬 | O(n^2) | O(1) | 최소값 선택 후 자리 교환 방식. |
삽입 정렬 | O(n^2) | O(1) | 정렬된 배열에 값을 삽입하는 방식. |
이진 탐색 | O(log n) | O(1) | 정렬된 배열에서 중간값을 기준으로 탐색. |
정리
정렬과 탐색 알고리즘은 데이터 분석과 다양한 응용 프로그램에서 기본적인 필수 기술입니다. 본 지침을 통해 각 알고리즘의 기초적인 개념과 구현 방법을 이해하였다면, 실제로 데이터를 다루는 프로젝트나 문제 해결 시 큰 도움이 될 것입니다. 파이썬으로 구현한 이러한 알고리즘들을 직접 실행하고 수정하면서 더욱 깊이 있는 이해를 할 수 있을 것입니다.
초보자들이 이해하기 쉬운 코드와 간단한 설명을 통해 시작할 수 있는 이 기초적인 정렬 및 탐색 알고리즘들은 프로그래밍 언어를 배우는 여정의 중요한 첫 단추가 될 것입니다.





