js-algorithms/sort/merge.js
2015-07-24 11:14:18 +04:30

43 lines
662 B
JavaScript

'use strict';
import _ from '../utils';
let arr = _.args.numbers();
function mergeSort(a, p, r) {
if(r - p === 1) return;
let q = Math.floor((r+p)/2);
mergeSort(a, p, q);
mergeSort(a, q, r);
merge(a, p, q, r);
}
function merge(a, p, q, r) {
let i = 0,
j = 0;
let left = a.slice(p, q),
right = a.slice(q, r);
left.push(Infinity);
right.push(Infinity);
for(let k = p; k < r; k++) {
if(left[i] <= right[j]) {
a[k] = left[i];
i++;
} else {
a[k] = right[j];
j++;
}
}
}
if (require.main === module) {
mergeSort(arr, 0, arr.length);
_.log(arr.join(' '));
}
module.exports = mergeSort;