function quickSort(arr) {
if (arr.length <= 1) return arr;
const pivot = arr[0];
const left = [];
const right = [];
for (let i = 1; i < arr.length; i++) {
if (arr[i] < pivot) left.push(arr[i]);
else right.push(arr[i]);
}
return quickSort(left).concat(pivot, quickSort(right));
}
const array = prompt("배열을 입력하세요")
.split(" ")
.map((n) => parseInt(n, 10));
console.log(quickSort(array));
위의 코드에선 pivot을 배열의 가장 첫번째 값으로 잡았지만, 중간값으로 잡는게 좋다고 한다.
quick sort는 정렬이 불필요한 배열이 들어와도 수행하게 되는데, 이 경우 최악의 경우로 O(n^2)의 시간 복잡도를 가지게 된다.
어떤 배열이 들어올지 미지수인 상태에서 quick sort를 구현하게 된다면, 그나마 최소나 최대값이 아닌 확률이 가장적은 중간값으로 pivot을 잡는것이다.
'PS > 제코베 JS 100제' 카테고리의 다른 글
제코베 JS 100제 / 55 / 하노이의 탑 (0) | 2022.08.26 |
---|---|
제코베 JS 100제 / 54 / 연속되는 수 (0) | 2022.08.24 |
제코베 JS 100제 / 53 / 괄호 문자열 (0) | 2022.08.24 |
제코베 JS 100제 / 51 / merge sort를 만들어보자 (0) | 2022.08.24 |