functionmergeSort(array) {if (array.length<2) return array // 원소가 하나일 때는 그냥 returnconstmiddleIdx=Math.floor(array.length/2) // 대략 반으로 분할constleftArr=array.slice(0, middleIdx)constrightArr=array.slice(middleIdx)returnmerge(mergeSort(leftArr),mergeSort(rightArr)) // 재귀적으로 분할하고 merge}functionmerge(leftArr, rightArr) {let sortedArr = []while (leftArr.length&&rightArr.length) {// 두 배열의 첫 원소를 비교하여 더 작은 수를 결과에 넣어줍니다.consttargetArr= leftArr[0] <= rightArr[0] ? leftArr : rightArrsortedArr.push(targetArr.shift()) }// 어느 한 배열이 더 많이 남았다면 나머지를 다 넣어줍니다.if (leftArr.length) { sortedArr =sortedArr.concat(leftArr) } else { sortedArr =sortedArr.concat(rightArr) }return sortedArr}mergeSort([5,2,4,7,6,1,3,8]) // [1, 2, 3, 4, 5, 6, 7, 8]