퀵정렬

MINBOK·2022년 3월 25일
0
post-thumbnail

퀵정렬이란?

병합정렬과 같이 분할과 정복을 이용하지만 피벗값을 기준으로 하는 정렬

퀵정렬 이해하기

[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]

JavaScript

Array.prototype.concat()

배열이나 값들을 기존 배열에 합쳐서 새 배열을 반환하는 메서드

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

0개의 댓글

관련 채용 정보