💡 자바스크립트 언어로 자료구조 & 알고리즘에 대해 배운 내용을 기록합니다
이전에 알아보았던 bubble, insertion, selection 정렬은 전반적으로 O(n^2) 의 시간복잡도를 가지므로, 배열의 길이가 커졌을때 상당히 비효율적인 알고리즘이 됩니다.
이러한 시간복잡도를 O(n logn)으로 개선할 수 있는 정렬 알고리즘들이 있습니다. 대표적인 것들이 Merge, Quick, Radix Sort인데요, 이 알고리즘들은 보다 더 효율적이지만, 그만큼 구현하기에 더 복잡하다는 점이 있습니다.
이번 포스트에서는 퀵 정렬 (Quick Sort)의 작동 방식을 알아보면서 자바스크립트 코드로 구현해보겠습니다.
Pivot Function
Pivot Picking
Quicksort Pseudocode
function pivot (arr, start = 0, end = arr.length - 1, i++) {
const swap = (arr, idx1, idx2) => {
[arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]);
}
// 일단 피벗이 항상 첫번째 요소라고 가정합니다
let pivot = arr[start];
let swapIdx = start;
for (let i = start + 1; i <= end; i++) {
if (pivot > arr[i]) {
swapIdx++;
swap(arr, swapIdx, i);
}
}
// start와 swapIdx의 위치를 바꿔줍니다
swap(arr, start, swapIdx);
return swapIdx;
}
// [3,1,6,8,2,4]
// -> return 2 --> [2,1,3,8,6,4]
quicksort pseudocode
function quickSort(arr, left = 0, right = arr.length-1) {
if (left < right) {
let pivotIndex = pivot(arr, left, right)
//left
quickSort(arr, left, pivotIndex-1);
//right
quickSort(arr, pivotIndex+1, right);
return arr;
}
}
Visualgo
Sorting Algorithm Animations
Udemy - Javascript Algorithms and Data Structures Masterclass