ํต ์ ๋ ฌ(quick sort) ?
- ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ฝ
- ๊ธฐ์ค์ (pivot)์ ์ ํด์, ๊ธฐ์ค์ ๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ ์ผ์ชฝ, ํฐ ๋ฐ์ดํฐ๋ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ชจ์ผ๋ ํจ์
- ๊ฐ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ ์ฌ๊ท์ฉ๋ฒ์ ์ฌ์ฉํด์ ๋ค์ ๋์ผ ํจ์๋ฅผ ํธ์ถํด ์ ์์ ๋ฐ๋ณต
- ํจ์๋ ์ผ์ชฝ(left) + ๊ธฐ์ค์ (pivot) + ์ค๋ฅธ์ชฝ(right)์ ๋ฆฌํด
def qsort(data):
if len(data) <= 1:
return data
pivot = data[0] #๋ฆฌ์คํธ ๋งจ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ (pivot)์ผ๋ก ๋๊ธฐ
#1.default
left, right = list(), list()
for index in range(1, len(data)):
if pivot > data[index]:
left.append(data[index])
else:
right.append(data[index])
#2.list comprehension ์ฌ์ฉ
left = [item for item in data[1:] if pivot > item]
right = [item for item in data[1:] if pivot <= item]
return qsort(left) + [pivot] + qsort(right) #๋ฆฌ์คํธ๋ฅผ ๋ง์
์ฐ์ฐ์ ํตํด ํฉ์น ์ ์๋ค
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์ด์ง ํ์ (Binary Search) (0) | 2024.02.06 |
---|---|
[Algorithm] ๋ณํฉ ์ ๋ ฌ(merge sort) (0) | 2024.02.06 |
๋์ ๊ณํ๋ฒ( Dynamic Programming) ๊ณผ ๋ถํ ์ ๋ณต(Divide Conquer) (0) | 2024.02.05 |
[Algorithm] ์ฌ๊ท ์ฉ๋ฒ (recursive call, ์ฌ๊ท ํธ์ถ) (0) | 2024.01.30 |
[Algorithm] ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (Sort Algorithm) (1) | 2024.01.30 |