
퀵 정렬은 데이터를 분할하는 과정과 정렬하는 과정으로 나뉘어진다.
아래의 코드는 partition() 함수와 quick_sort()함수로 구성되어있으며,
partition() 함수는 pivot을 기준으로 정렬을, quick_sort()함수는 분할을 담당한다.
def partition(arr, left, right):
low = left
high = right+1
pivot = arr[left]
while True:
while True: #pivot의 왼쪽 리스트 중에 pivot보다 큰 요소 찾기
low += 1
condition = low <= right and arr[low] < pivot
if not condition:
break
while True: #pivot의 오른쪽 리스트 중에 pivot보다 작은 요소 찾기
high -= 1
condition = high >= left and arr[high] > pivot
if not condition:
break
if low < high: #찾은 두 데이터를 교환해준다
arr[low], arr[high] = arr[high], arr[low]
if low > high:# 부분 정렬 완료
break
arr[left], arr[high] = arr[high], arr[left]
return high
def quick_sort(arr, left, right):
if left < right:
pivot = partition(arr, left, right)#분분 정렬 후 pivot의 위치 반환
quick_sort(arr, left, pivot-1) #피벗의 왼쪽 데이터에 대해 분할 실시
quick_sort(arr, pivot+1, right) #피벗의 오른쪽 데이터 대해 분할 실시