반응형
퀵 정렬은 찰스 앤터니 리처드 호어가 개발한 정렬 알고리즘으로 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬이다.
난수열에 대해 퀵 정렬을 실행한 그림.
수평선은 피벗 값을 가리킨다.
퀵 정렬은 분할 정복(divide and conquer) 방법을 통해 리스트를 정렬한다.
- 리스트 가운데서 하나의 원소를 고른다. 이렇게 고른 원소를 피벗이라 한다.
피벗 앞(left)에는 피벗보다 값이 작은 모든 원소들이 오고, 피벗 뒤(right)에는 피벗보다 값이 큰 모든 원소들이 오도록 피벗을 기준으로 리스트를 둘로 나눈다.
이렇게 리스트를 둘로 나누는 것을 분할이라 한다. 분할을 마친 뒤에 피벗은 더 이상 움직이지 않는다.- 분할된 두 개의 작은 리스트에 대해 재귀(Recursion)적으로 이 과정을 반복한다. 재귀는 리스트의 크기가 0이나 1이 될 때까지 반복된다.
재귀 호출이 한번 진행될 때마다 최소한 하나의 원소는 최종적으로 위치가 정해지므로, 이 알고리즘은 반드시 끝난다는 것을 보장할 수 있다.
상세한 알고리즘 설명은 위키에서 잘 정리되어 있으니 링크에서 확인하고, 아래 javascript로 구현된 예제를 확인하자.
반응형
'Algorithm' 카테고리의 다른 글
jvascript array 경우의 수 구하기 (permute) (0) | 2022.02.15 |
---|---|
LRU Cache (Least Recently Used) / 프로그래머스 캐시 (0) | 2022.01.19 |
콜라츠 추측 (0) | 2021.08.27 |
하샤드의 수 (Harshad Number) (0) | 2021.08.25 |
덧셈 뺄셈 동적 계산 (dynamic plus minus, Dynamic addition and subtraction) (0) | 2019.07.19 |
주민등록번호 체계 및 유효성 검사 (javascript) (2) | 2016.10.07 |
재귀 함수를 이용한 거듭제곱 (a의 n승) (javascript) (0) | 2016.05.18 |
에라토스테네스의 체를 이용한 소수 찾기 (0) | 2016.05.17 |