퀵 정렬

Bam·2022년 3월 7일
0

Algorithm

목록 보기
5/15
post-thumbnail

퀵 정렬

퀵 정렬은 가장 많이 사용되고 있는 가장 빠른 정렬 방식입니다. 정렬 대상을 특정 기준으로 두 개의 그룹을 나누고 다시 나눈 그룹에 대해 또 그룹을 나누고를 반복하여 정렬하는 방식입니다. 이때 특정 기준으로 설정하는 기준점을 피벗(Pivot)이라고 합니다. 퀵 정렬시간 복잡도O(nlogn)입니다.

퀵 정렬 방식을 설명드리겠습니다. 우선 다음과 같은 배열이 있을 때 피벗을 설정합니다. 피벗은 보통 배열의 가운데 부분에 있는 요소에 대해 설정합니다.피벗은 6으로 설정하겠습니다. 4로 설정하도 아무런 문제가 없습니다.


피벗에 대해 피벗보다 작은 그룹, 피벗보다 큰 그룹으로 다시 두 개의 그룹으로 나눕니다. 다시 나눈 두 개의 그룹에 대해서 또 피벗을 설정하고 다시 두 개의 그룹으로 나눕니다.


이 방식을 각 그룹의 요소가 1개가 될 때 까지 반복합니다.이렇게 요소가 1개인 그룹만들이 남으면 이들을 다시 배열로 모아주기만 하면 정렬이 완료됩니다.

퀵 정렬 구현

export const quickSort = arr => {
    let left = [];
    let right = [];
    let pivot = [arr[0]];

    //arr 요소가 1개 일땐 arr를 리턴하며 종료
    if (arr.length < 2) {
        return arr;
    };

    //반복문으로 arr 그룹을 순회합니다.
    for (let i = 1; i < arr.length; i++) {
        //피벗보다 작으면 피벗의 왼쪽 그룹으로
        if (arr[i] < pivot) {
            left.push(arr[i]);
        }
        //비벗보다 크면 피벗의 오른쪽 그룹으로
        else if (arr[i] > pivot) {
            right.push(arr[i]);
        }
        //피벗과 같으면 피벗에 넣기
        else {
            pivot.push(arr[i]);
        }
    }

    //재귀 함수로 남은 그룹에 대해 퀵 정렬을 실행한다.
    return quickSort(left).concat(pivot, quickSort(right));
};

0개의 댓글

관련 채용 정보