알고리즘 퀵정렬
퀵 정렬 (Quick Sort)
- 정렬 알고리즘.
- 선택정렬보다 빠르고 자주 사용된다.
- 분할 정복 전략. (기준 원소 (pivot)로 분할 (partitioning))
- 기준 원소를 고른다.
- 기준 원소를 기점으로 하위 배열로 분할한다.
- 하위 배열에 대해 재귀적으로 퀵 정렬을 호출한다.
- 어떤 값을 기준원소로 고르든 두 개의 하위 배열에 재귀적으로 퀵 정렬을 호출하면 된다.
def quicksort(array) :
if len(array) < 2 :
return array ## 기본단계 : 원소의 개수가 0이나 1이면 이미 정렬된 상태
else :
##재귀단계
pivot = array[0]
##기준 원소보다 작거나 같은 모든 원소로 이루어진 하위 배열
less = [i for i in array[1:] if i <= pivot]
##기준 원소보다 큰 모든 원소로 이루어진 하위 배열
greater = [i for i in array[1:] if i>pivot]
return quicksort(less) + [pivot] + quicksort(greater)
print quicksort([10,5,2,3])
퀵 정렬의 성능은 선택한 기준 원소에 크게 의존한다. 예시로 첫 번째 원소를 항상 기준 원소로 선택한다면 분할된 두 개의 하위 배열중 하나는 항상 빈 배열이 되고 호출 스택이 길어지게 된다. 정 가운데 값을 기준 원소로 정할시 재귀적 호출을 많이 할 필요가 없이 기본 단게에 더 빨리 도달하게 되기 때문에 호출 스택이 짧아진다.
- 참고 : 귀납적 증명 알고리즘이 재대로 동작하는지 증명하는 방법 중 한가지. 귀납적 증명에도 기본단계(base case)와 귀납 단계 (inductive case)라는 두가지 단계가 필요하다. 분할 정복 전략과 함께사용되기도 한다.
reference
도서 : Hello Coding 그림으로 개념을 이해하는 알고리즘