Quick_sort.md
๊ฐ๋
๋ถ์์ ๋น๊ต ์ ๋ ฌ์ ์ํ๋ฉฐ, ํผ๋ฒ์ ๊ธฐ์ค์ผ๋ก ํผ๋ฒ๋ณด๋ค ์์ ์์๋ค์ ๋ชจ๋ ์ผ์ชฝ์ผ๋ก ์ฎ๊ฒจ์ง๊ณ (์ค๋ฆ์ฐจ์๊ธฐ์ค) ํผ๋ฒ๋ณด๋ค ํฐ ์์๋ค์ ๋ชจ๋ ํผ๋ฒ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ฒจ ๋ถํ ๋ ๋ถ๋ถ ๋ฆฌ์คํธ์ ๋ํด ์ํ ํธ์ถ์ ์ด์ฉํ์ฌ ์ ๋ ฌ์ ๋ฐ๋ณตํ๊ณ ๋์ด์ ๋ถํ ์ด ๋ถ๊ฐ๋ฅํ ๋๊น์ง ๋ฐ๋ณตํ์ฌ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
ํผ๋ฒ - Pivot ๋ฆฌ์คํธ ์์ ์์์ ๊ฐ, ๋์ฒด๋ก ์ฒซ๋ฒ์งธ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค.
๋จ๊ณ
๋ถํ (Divide) ์ ๋ ฅ ๋ฐฐ์ด์ ํผ๋ฒ์ ๊ธฐ์ค์ผ๋ก ๋น๊ท ๋ฑํ๊ฒ 2๊ฐ์ ๋ถ๋ถ๋ฐฐ์ด๋ก ๋ถํ
์ ๋ณต(Conquer)
๋ถ๋ถ ๋ฐฐ์ด์ ์ ๋ ฌ
๋ถ๋ถ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 0์ด๋ 1์ด ๋ ๋๊น์ง ์ํํธ์ถ์ ์ด์ฉํ์ฌ ๋ถํ ์ ๋ณต์ ์ ์ฉ
๊ฒฐํฉ(Combine) ์ ๋ ฌ๋ ๋ถ๋ถ ๋ฐฐ์ด๋ค์ ํ๋์ ๋ฐฐ์ด์ ํฉ๋ณ
๐ ์ํํธ์ถ์ด ํ๋ฒ ์งํ๋ ๋๋ง๋ค ์ต์ํ ํ๋์ ์์(ํผ๋ฒ)๋ ์ต์ข ์ ์ผ๋ก ์์น๊ฐ ์ ํด์ง๋ฏ๋ก, ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋์ ๋๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์ ์๋ค.
ํน์ง
๐๋ถํ ์ ๋ณต(divide and conquer) ๋ฐฉ๋ฒ
๋ฌธ์ ๋ฅผ ์์ 2๊ฐ์ ๋ฌธ์ ๋ก ๋ถ๋ฆฌํ๊ณ ๊ฐ๊ฐ์ ํด๊ฒฐํ ๋ค์, ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์์ ์๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ ๋ต
์์

๊ตฌํ
#์ค๋ฆ์ฐจ์
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2] #๋ฆฌ์คํธ์ ์ค๊ฐ ๊ฐ์ ํผ๋ฒ์ผ๋ก ์ง์
low, equal, high = [], [], []
for i in arr:
if i > pivot:
low.append(i):
elif i < pivot:
high.append(i):
else:
equal.append(i)
return quick_sort(low) + equal + quick_sort(high)
Last updated