퀵 정렬(quick sort)
수정하기
문서 생성 2021-08-04 17:35:31 최근 수정 2021-10-02 10:23:29
Merge-Sort 처럼 분할 정복 기법을 사용하는 알고리즘으로 이름에서도 알 수 있듯이 다른 정렬 알고리즘에 비해 훨씬 빠르게 동작한다.
알고리즘
- 리스트 가운데 하나의 원소를 고른다. 피벗(pivot)이라고 한다.
- 피벗 앞에는 피벗보다 값이 작은 원소들이 오도록, 피벗 뒤는 피벗보다 큰 원소들이 오도록 리스트를 둘로 나눈다.(분할)
- 분할된 2개의 리스트에 대해 재귀적으로 1, 2 과정을 반복한다. (리스트의 크기가 1보다 큰 경우에만)
시간 복잡도
- 최악:
O(n2)
- 최선:
O(nlogn)
- 평균:
O(nlogn)
예제
JavaScript
const solution = (arr) => {let answer = arranswer = quickSort(arr)return answer}const quickSort = (arr) => {let n = arr.lengthif(n <= 1)return arr// 피벗 정하고 기준에 맞춰 두 개의 리스트로 나누기let pivot = arr[n-1]let left = []let right = []for(let i=0; i<n-1; i++) {if(arr[i] < pivot) {left.push(arr[i])}else {right.push(arr[i])}}// 각 리스트에 대해 재귀적으로 퀵 정렬을 한 후// 합쳐주기 (왼쪽 리스트 + 피벗 + 오른쪽 리스트)let merge = [...quickSort(left), ...[pivot], ...quickSort(right)]return merge}arr1 = [4, 1, 7, 6, 5, 8, 2, 3]console.log(solution(arr1))