October 31, 2020
💡 퀵 정렬은 대부분의 컴퓨터 언어가 채택한 정렬 알고리즘으로 매우 빠르고 평균 시나리오에서 효율적이기 때문에 퀵 정렬이라는 이름이 붙었다.
💡 분할 정복 알고리즘의 대표적인 예 중 하나
def qsort(data):
if len(data) <= 1:
return data
left, right = list(), list()
pivot = data[0]
for index in range(1, len(data)):
if pivot > data[index]:
left.append(data[index])
else:
right.append(data[index])
return qsort(left) + [pivot] + qsort(right)
위의 코드를 list comprehension으로 바꾼다면 조금 더 간결하게 표현할 수 있다.
def qsort(data):
if len(data) <= 1:
return data
pivot = data[0]
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)
평균적인 시나리오일 때
최악의 시나리오 일 때
즉, 모든 데이터를 비교해야 할 때
최악의 시나리오에서는 둘로 나누는 횟수가 이 아닌 이 된다. 그러므로 가 된다.
💡 보통 알고리즘의 시간 복잡도는 worst case를 기준으로 하지만, 퀵정렬의 경우 최선의 경우에 가까운 성능을 평균적으로 보이기 때문에 평균적인 시나리오를 빅 O로 보기도 한다.
Source