병합정렬과 같이 분할과 정복을 이용하지만 피벗값을 기준으로 하는 정렬
[66, 77, 54, 32, 10, 5, 11, 15]
1) 피벗값 : 66 // 피벗값보다 작은 값을 앞에 큰 값을 뒤에
[77, 54, 32, 10, 5, 11, 15]
[77, 54, 32, 10, 5, 11, 15] + [66] + [66보다 큰 값]
[54, 32, 10, 5, 11, 15] + [66] + [77]
2) 피벗값 : 54
[54, 32, 10, 5, 11, 15] + [66] + [77]
[32, 10, 5, 11, 15] + [54] + [66] + [77]
3) 피벗값 : 32
[10, 5, 11, 15] + [32] + [54] + [66] + [77]
4) 피벗값 : 10
[5] + [10] + [11, 15] + [32] + [54] + [66] + [77]
5) 피벗값 : 11
[5] + [10] + [11] + [15] + [32] + [54] + [66] + [77]
function 퀵정렬(입력배열) {
let 입력배열의길이 = 입력배열.length;
if (입력배열의길이 <= 1) {
return 입력배열;
}
let 피벗값 = [입력배열.shift()];
let 그룹하나 = []; // 피벗값보다 작은 값들
let 그룹둘 = []; // 비벗값볻다 큰 값들
for (let i in 입력배열) {
if (입력배열[i] < 피벗값) {
그룹하나.push(입력배열[i]);
} else {
그룹둘.push(입력배열[i]);
}
}
// console.log(`그룹하나 : ${그룹하나}\n 그룹둘 : ${그룹둘}\n 피벗값 : ${피벗값}\n`);
return 퀵정렬(그룹하나).concat(피벗값, 퀵정렬(그룹둘));
}
console.log(퀵정렬(입력값)); // [5, 10, 11, 15, 32, 54, 66, 77]
배열이나 값들을 기존 배열에 합쳐서 새 배열을 반환하는 메서드
const num1 = [1, 2, 3];
const num2 = [4, 5, 6];
const num3 = [7, 8, 9];
num1.concat(num2, num3);
// 결과: [1, 2, 3, 4, 5, 6, 7, 8, 9]
✨참고
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/concat