이번 글은 아래 자료를 참고하여 작성하였습니다.
Insertion Sort on Khan Academy
const partition = function (array, startIdx, lastIdx) {
let partitonedArr = array,
partitonedArrStartIdx = startIdx,
partitonedArrLastIdx = lastIdx;
const createPartitionedArr = function (
partitonedArr,
partitonedArrStartIdx,
partitonedArrLastIdx
) {
let partitonedRightArrStartIdx = partitonedArr[partitonedArrStartIdx];
partitonedArr[partitonedArrStartIdx] = partitonedArr[partitonedArrLastIdx];
partitonedArr[partitonedArrLastIdx] = partitonedRightArrStartIdx;
};
let partitonedLeftArrStartIdx = partitonedArrStartIdx;
for (let s = partitonedArrStartIdx; s < partitonedArrLastIdx; s++) {
if (partitonedArr[s] <= partitonedArr[partitonedArrLastIdx]) {
createPartitionedArr(partitonedArr, s, partitonedLeftArrStartIdx);
partitonedLeftArrStartIdx++;
}
}
createPartitionedArr(
partitonedArr,
partitonedArrLastIdx,
partitonedLeftArrStartIdx
);
return partitonedLeftArrStartIdx;
};
const quickSort = function (array, startIdx, lastIdx) {
if (startIdx < lastIdx) {
let midIdx = partition(array, startIdx, lastIdx);
quickSort(array, startIdx, midIdx - 1);
quickSort(array, midIdx + 1, lastIdx);
}
};
const array = [9, 7, 5, 11, 12, 2, 14, 3, 10, 6];
quickSort(array, 0, array.length - 1);
console.log(array); // [ 2, 3, 5, 6, 7, 9, 10, 11, 12, 14 ]
quick sort
는 배열 정렬의 기준값이 되는 pivot
을 기준으로 pivot
보다 작은 값을 왼쪽에, 큰 값을 오른쪽에 정렬하는 알고리즘이다. 이때 pivot
은 배열의 가장 마지막 값이다.
위 그림에서 pivot
의 값은 6
인데, 두 번째 줄을 보면 6
보다 작은 값은 왼쪽 배열에, 큰 값은 오른쪽 배열에 담겼다. 6
을 기준으로 나눈 두 배열에서 다시 끝 값을 pivot
으로 삼아 똑같은 방식으로 각 배열의 값을 정렬한다.
merge sort
와 같이 divide-and-conquer
방식으로 작동한다. merge sort
에서는 combine
단계에서 정렬이 이뤄지는 반면, quick sort
에서는 divide
단계에서 모든 작업이 이뤄진다.