April 03, 2021
ํต ์ ๋ ฌ์ ๋ถํ [1]๊ณผ ์ ๋ณต[2]์(Divide and conquer) ์ ๊ทน์ ์ผ๋ก ํ์ฉํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํต ์ ๋ ฌ์ PIVOT์ด๋ผ๋ ๊ธฐ์ค๊ฐ์ด ์กด์ฌํ๋ค. ์ด PIVOT์ ๊ธฐ์ค์ผ๋ก ์์ ๊ฐ์ ๋ฒ์, ํฐ ๊ฐ์ ๋ฒ์๋ก ๋๋๋ ๋ถํ &์ ๋ณต ๊ณผ์ ์ ๋ฐ๋ณตํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.

case1:
def quick_sort(arr):
def sort(arr, left, right):
if right <= left:
return
mid = partition(arr, left, right)
sort(arr, left, mid - 1)
sort(arr, mid, right)
def partition(arr, left, right):
print('begin',arr)
pivot = (left + right) // 2
while left <= right:
while arr[left] < arr[pivot]:
# pivot ๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง ์ธ๋ฑ์ค๋ฅผ ์ฐพ๋๋ค.
left += 1
while arr[right] > arr[pivot]:
# pivot ๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง ์ธ๋ฑ์ค๋ฅผ ์ฐพ๋๋ค.
right -= 1
if left <= right:
arr[right], arr[left] = arr[left], arr[right]
right -= 1
left += 1
print('ing',arr, left, right)
return left
sort(arr, 0, len(arr) - 1)
x = [0,1]
quick_sort(x)
print(x)ํต์ ๋ ฌ ์ฒ๋ผ ๊ตฌํ ๊ณผ์ ์์ while๋ก ๋ฐ๋ณต๋ฌธ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ์ ์ฌ๊ทํจ์๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ ์ข ๋ฃ์กฐ๊ฑด์ ๋งค์ฐ ์๋ฐํ๊ฒ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค.
์์
'''in quick_sort function'''
mid = partition(arr, left, right) # left = 0, right = 1
sort(arr, left, mid - 1) # left = 1, mid = 0
sort(arr, mid, right)
'''in partition method'''
if left <= right:
print(left,right)
arr[right], arr[left] = arr[left], arr[right]
right -= 1
left += 1
return right # 0 => mid๊ฐ ๋จsort(arr, left, mid - 1)๋ก left(0), mid(1) - 1 ์ด๊ธฐ ๋๋ฌธ์ == ์กฐ๊ฑด์์ ํ์ถ๋๋ค. ๋ํ ๋ค์ ํต์ ๋ ฌ์ ์ค๋ฅธ์ชฝ ๋ฒ์๋
sort(arr, mid, right)๋ก mid(1) right(1)์ด๊ธฐ ๋๋ฌธ์ == ์กฐ๊ฑด์์ ํ์ถํ๊ฒ ๋๋ค.while left <= right:
while arr[left] < arr[pivot]: # pivot ๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง ์ธ๋ฑ์ค๋ฅผ ์ฐพ๋๋ค.
left += 1
while arr[right] > arr[pivot]: # pivot ๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง ์ธ๋ฑ์ค๋ฅผ ์ฐพ๋๋ค.
right -= 1if left <= right๋ฅผ if left < right๋ก ์์ ํด์ฃผ๋ฉด ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊น? left์ right๊ฐ ๊ฐ์์ง๋ ์๊ฐ while ๋ฌธ์ ๋ฒ์ด๋ ์ ์๊ฒ ๋๋ค. => left <= right ์กฐ๊ฑด์์๋ ๋ฐ๋ณต๋๊ธฐ ๋๋ฌธ์.while left < right๋ก ๋ฐ๊ฟ์ฃผ๋ฉด, left๊ฐ 0 right๊ฐ 1์ฒ๋ผ 1 ์ธ๋ฑ์ค๊ฐ ์ฐจ์ด๋๊ณ ์ ๋ ฌ์ด ๋์ด์๋ ๊ฒฝ์ฐ๋ผ๋ฉด, partition์ ์์ชฝ์์๋ left์ right๊ฐ ๋ชจ๋ 0์ด ๋๋ ์ํฉ์ด ๋ฐ์ํ๋ค. ์ด๋ mid๋ left์ ๊ฐ์์ ๊ฐ์ ๋ฐํํ๋ค. ์ฆ sort(arr, mid, right)๋ ๊ณ์ 0๊ณผ 1์ ์
๋ ฅํ๊ฒ ๋์ด ์ฌ๊ท๋ฌธ์ ๋น ์ ธ๋๊ฐ ์ ์๊ฒ ๋๋ค.
=> `sort(arr, mid, right)๋ mid๊ฐ left์ ๊ฐ์์ง๋ ์ํฉ์ด ๋ฐ์ํ๋ฉด ๋ฌด์กฐ๊ฑด ์ฌ๊ท์ ๋น ์ง๊ฒ ๋๋ค.์ฃผ์:
[1] ๋ถํ : ์ปค๋ค๋ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋์ด ํด๊ฒฐํ๋ ๊ณผ์
[2] ์ ๋ณต: ๋ถํ ๋ ๋ถ๋ถ์ ํน์ ๊ธฐ์ค์ ๋ง๊ฒ ๋ง๋ค์ด ๊ฐ๋ ๊ณผ์
์ฐธ์กฐ: