forked from thuva4/Algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmergeSort.js
More file actions
30 lines (27 loc) · 763 Bytes
/
mergeSort.js
File metadata and controls
30 lines (27 loc) · 763 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* Receives an array and retrieves it sorted by merge
* [1, 5, 2, 4, 3, 6, 7] => [1, 2, 3, 4, 5, 6, 7]
* @param {Array} items
* @returns {Array}
*/
function mergeSort (items) {
if (items.length < 2) {
return items
}
let middle = Math.floor(items.length / 2)
let left = items.slice(0, middle)
let right = items.slice(middle)
let params = _merge(mergeSort(left), mergeSort(right))
params.unshift(0, items.length)
items.splice(...params)
return items
function _merge (left, right) {
const result = []
let il = 0
let ir = 0
while (il < left.length && ir < right.length) {
result.push(left[il] < right[ir] ? left[il++] : right[ir++])
}
return result.concat(left.slice(il)).concat(right.slice(ir))
}
}