728x90
안녕하세요 logro 입니다 :)
오늘은 정렬 알고리즘 중에서도 특히 빠르고 효율적이라고 소문난 퀵 정렬(Quick Sort)에 대해 알아볼게요! 이름부터가 뭔가 멋지죠? 😎
🍰 퀵 정렬, 케이크 자르기처럼 생각해보자!
퀵 정렬을 한마디로 설명하면 “기준점을 정해서 좌우로 나누고, 그걸 반복해서 정렬하는 방식”이에요.
조금 더 쉽게 설명해볼게요. 🎂
생일 케이크를 친구들과 나누고 싶어요!
가장 좋아하는 조각(기준점, Pivot)을 고른 뒤, 그보다 작거나 덜 달면 왼쪽에,
더 크거나 더 달면 오른쪽에 두고, 각 그룹을 다시 같은 방식으로 나눠요!
이걸 코드로 옮기면 퀵 정렬이 됩니다.
즉, 기준점(Pivot)을 기준으로 좌우를 나누고, 그걸 계속 반복해 정렬하는 거예요.
💻 퀵 정렬 예시
def quick_sort(arr):
if len(arr) <= 1:
return arr # 재귀 종료 조건
pivot = arr[0] # 첫 번째 요소를 기준점으로 선택
left = [x for x in arr[1:] if x <= pivot] # pivot보다 작거나 같은 값들
right = [x for x in arr[1:] if x > pivot] # pivot보다 큰 값들
return quick_sort(left) + [pivot] + quick_sort(right)
# 사용 예시
data = [5, 3, 8, 4, 2, 7, 1, 10]
print(quick_sort(data))
🔍 왜 퀵 정렬이 빠를까?
퀵 정렬은 평균적으로 O(n log n) 의 시간복잡도를 가져요.
즉, 데이터를 반으로 쪼개면서 정렬하기 때문에 전체를 일일이 비교하지 않아도 빠르게 끝납니다.
하지만!
최악의 경우(이미 정렬된 배열을 기준점이 계속 못 고르면)에는 O(n²) 이 될 수도 있어요.
그럼에도 불구하고 실제 사용에선 매우 빠르고 효율적이기 때문에 많이 쓰인답니다 🙂
✅ 정리해볼까요?
- 퀵 정렬은 분할 정복(divide and conquer) 알고리즘의 대표 주자!
- 기준점을 잡고, 그보다 작은 값은 왼쪽, 큰 값은 오른쪽으로 나누며 정렬.
- 재귀적으로 나눠 정렬하므로 코드도 깔끔하고 이해도 쉬움.
- 평균적으로 매우 빠른 정렬 방법 (O(n log n))
다음에 다른 정렬 알고리즘과의 차이점도 비교해보면 재미있을 거예요 😉
이해 안 가는 부분이나 추가로 궁금한 주제가 있다면 언제든지 말해주세요!
728x90
'알고리즘 & 자료구조' 카테고리의 다른 글
힙 자료구조로 똑똑하게 정렬한다! 힙 정렬(Heap Sort) 쉽게 이해하기 🛠️ (0) | 2025.03.28 |
---|---|
나눠서 정렬하고 합친다! 합병 정렬(Merge Sort) 완전 정복 ✨ (0) | 2025.03.28 |
데이터 지문을 만드는 마법? 해시 알고리즘의 세계! (2) | 2025.03.28 |
자기 자신을 부르는 함수? 재귀함수 쉽게 이해하기! (0) | 2025.03.28 |
어디 숨었니? 반으로 쪼개며 찾자! - 이진 탐색(Binary Search) 쉽게 배우기 (0) | 2025.03.28 |