합병정렬

2020. 11. 20. 17:14Data Structure

병합정렬도 정렬 방법 중 하나이다. 방법은 주어진 배열을 반으로 나누어 크기 순으로 새로운 배열에 넣는 방식이다.

 

이 방식은 앞의 버블정렬, 삽입정렬, 선택정렬과 다르게 시간복잡도가 O(nlogn)이다. 그래서 앞의 세가지보다 더 사용하기 좋지만, 최악의 경우를 고려한다면 퀵정렬이 조금 더 앞선다고 한다.

 

function mergeSort(array) {
    if(array.length < 2) return array;

    var pivot = Math.floor(array.length / 2);
    
    var left_arr = array.slice(0, pivot);
    var right_arr = array.slice(pivot);

    return merge(mergeSort(left_arr), mergeSort(right_arr));
}

function merge(left, right) {
    var result = [];
    while(left.length && right.length){
        if(left[0] < right[0]) result.push(left.shift());
        else result.push(right.shift());
    }

    while (left.length) result.push(left.shift());
    while (right.length) result.push(right.shift());
    return result;
}

console.log(mergeSort([1,2,7,2,5,3,8,4,3,2,11]));
/*
[
   1, 2, 2, 2, 3,
   3, 4, 5, 7, 8,
  11
]
*/

'Data Structure' 카테고리의 다른 글

삽입정렬  (0) 2020.11.18
선택정렬  (0) 2020.11.17
버블 정렬  (0) 2020.11.16
Stack(1) - 정의  (0) 2020.10.29