mergeSort.js 807 B

1234567891011121314151617181920212223242526
  1. var isSorted = require('./isSorted');
  2. exports = function(arr) {
  3. var cmp =
  4. arguments.length > 1 && arguments[1] !== undefined
  5. ? arguments[1]
  6. : isSorted.defComparator;
  7. if (arr.length <= 1) return arr;
  8. var middle = floor(arr.length / 2);
  9. var left = arr.slice(0, middle);
  10. var right = arr.slice(middle);
  11. return merge(exports(left, cmp), exports(right, cmp), cmp);
  12. };
  13. function merge(left, right, cmp) {
  14. var ret = [];
  15. var i = 0;
  16. var j = 0;
  17. while (i < left.length && j < right.length) {
  18. cmp(left[i], right[j]) < 0 ? ret.push(left[i++]) : ret.push(right[j++]);
  19. }
  20. while (i < left.length) ret.push(left[i++]);
  21. while (j < right.length) ret.push(right[j++]);
  22. return ret;
  23. }
  24. var floor = Math.floor;
  25. module.exports = exports;