-
반응형
1. 기본 원리
- 기준점(pivot) 기준으로 기준점보다 작은 데이터는 왼쪽으로, 기준점보다 큰 데이터는 오른쪽으로 보내는 함수 작성
- 보통 기준점(pivot)은 범위에서 맨 앞에 있는 것으로 선택
- 기준점(pivot) 왼쪽과 오른쪽 범위를 재귀 함수로 다시 정렬해주는 프로세스 반복
- 모든 데이터가 [기준점(pivot), 왼쪽, 오른쪽] 쌍으로 분리가 될 때까지 반복
- 분리되어 각각의 범위가 정렬된 것들을 다시 병합
2. 코드 구현 전 생각정리
- 3 5 1 7 4 (3이 기준점)
- 1 3 5 7 4 (5가 기준점)
- 1 3 4 5 7
- Python list를 활용해서 재귀함수를 통해 정렬된 list를 이어나가면 어떨까?
3. 코드 구현
def qsort(data): if len(data)<=1: return data left, right = list(), list() pivot = data[0] for index in range(1,len(data)): if pivot < data[index]: right.append(data[index]) else: left.append(data[index]) return qsort(left) + [pivot] + qsort(right)
4. 시간 복잡도
일반적일 때: O(nlogn) -> 단계가 logn만큼 생성, 각 단계별로 n만큼 비교하는 과정
최악일 때: O(n^2) -> 모든 데이터를 분석해야 할 때 ex) 1 2 3 4 5
반응형'IT > 자료구조 & 알고리즘' 카테고리의 다른 글
[알고리즘] 이진 탐색(Binary Search) (Python) (0) 2021.08.08 [알고리즘] 병합정렬(Merge Sort) (Python) (0) 2021.08.07 [알고리즘] 재귀 용법(Recursive Call) (Python) (0) 2021.08.04 시간 복잡도(Time Complexity) & 공간 복잡도(Space Complexity) (0) 2021.07.30 댓글