💡 idea
- pivot을 선택한다
- pivot을 기준으로 비교데이터가 작으면 왼쪽, 크면 오른쪽에 배치한다.
- 재귀적으로 정렬한다.
import random
def quick_sort(data):
if len(data) <= 1:
return data
left, right = list(), list()
pivot = data[0]
for idx in range(1, len(data)):
if data[idx]<pivot:
left.append(data[idx])
else:
right.append(data[idx])
return quick_sort(left) + [pivot] + quick_sort(right)
data = random.sample(range(100),10)
print(quick_sort(data))
# [14, 19, 33, 56, 61, 65, 78, 79, 84, 90]
🤴 기왕 python 쓰는거 표현식으로 더 간결한 코드를 작성해보자
def quick_conph(data):
if len(data) <= 1:
return data
pivot = data[0]
left = [item for item in data[1:] if item < pivot]
right = [item for item in data[1:] if item >= pivot]
return quick_conph(left) + [pivot] + quick_conph(right)
data = random.sample(range(100),10)
print(quick_conph(data))
# [13, 20, 46, 55, 64, 72, 79, 81, 85, 86]
참고 : quick sort 시간복잡도 증명