포도가게의 개발일지
Quick Sort(퀵 정렬) 본문
반응형
퀵정렬은 분할과 정복의 알고리즘이다
1. 특정값(pivot)을 기준으로 작은값과 큰값을 나누면서 정렬을 하는 방법
2. 시간복잡도 : O(nlogn)
3. 특정값을 한쪽으로 치우쳐져 잡거나 잘못 잡으면 O(n^2)에 수렴된다
## 배열 swap 함수
def swap(arr, a,b):
temp = arr[a]
arr[a] = arr[b]
arr[b] = temp
## 퀵 정렬
def Quicksort(arr, start, end):
if start >= end: ##더 이상 나눌게 없으면 리턴으로 마무리
return
pivot = start ##pivot 변수를 가장 좌측으로 시작했음 기준이 되는 값
left = start + 1 ##이미지와 달리 저는 pivot값을 좌측 끝으로 시작했습니다.
right = end
while left <= right : ##좌측 시작값이 우측보다 커지면 멈춰야됨
while left <= end and arr[left] <= arr[pivot]: ## pivot 값보다 작으면 패스 크면 정지
left += 1
while right > start and arr[right] > arr[pivot]: ## pivot 값보다 크면 패스 작으면 정지
right -= 1
if left > right: ## 만일 left 위차와 right 위치가 교차되면 마지막 작은 값을 pivot값과 위치변환
swap(arr, pivot, right)
else: ##교차되지 않은 경우 left가 찾은 큰값과 right가 찾은 작은값 swap
swap(arr, left, right)
Quicksort(arr, start, right-1) ##퀵정렬 답게 디바이드된 좌측쪽만 재귀 반복
Quicksort(arr, right+1, end) ##퀵정렬 답게 디바이드된 우측쪽만 재귀 반복
####main 함수####
arr = [7,9,8,3,1,4,6,2,5]
Quicksort(arr, 0, len(arr)-1)
print(arr)
'자료구조' 카테고리의 다른 글
위상정렬 & 백준 2252 줄세우기 (0) | 2021.08.20 |
---|---|
stack or queue로 구현한 (DFS & BFS ) (0) | 2021.08.10 |
Merge sort(병합 정렬) (0) | 2021.07.13 |
연결리스트(1)add_first 함수 이해 (0) | 2021.07.01 |
연결 LIST (0) | 2021.06.24 |
Comments