IT/자료구조 & 알고리즘
[알고리즘] 퀵 정렬(Quick Sort) (Python)
ziasu
2021. 8. 4. 21:57
반응형
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
반응형