유튜브 강의 및 여러 레퍼런스를 참고한 정리입니다.
어렵고 큰 문제를 쉽고 작은 문제로 분할해 재귀적으로 해결하는 방법이다.
S = [15, 22, 13, 27, 12, 10, 20, 25]
def quicksort(S, low, high):
if high > low:
pivotpoint = partition(S, low, high)
quicksort(S, low, pivotpoint-1)
quicksort(S, pivotpoint+1, high)
기준 원소(pivotpoint)를 정하고, 이를 기준으로 분할하는 파티션(partition)알고리즘을 정의해야 한다.⇒ 본 정리에서는 첫 번째 원소를 pivot으로 활용하는 방법을 채택했다.
def partition(S, low, high):
pivotitem = S[low]
j = low
for i in range(low+1, high+1):
if S[i] < pivotitem:
j += 1
S[i], S[j] = S[j], S[i]
pivotpoint = j
S[low], S[pivotpoint] = S[pivotpoint], S[low]
return pivotpoint
def partition2(S, low, high):
pivot = S[low]
i = low+1
j = high
while i <= j:
while S[i] < pivot:
i += 1
while S[j] > pivot:
j -= 1
if i < j:
S[i], S[j] = S[j], S[i]
pivot = j
S[low], S[pivot] = S[pivot], S[low]
return pivot