shellSort.js 688 B

12345678910111213141516171819202122232425
  1. var swap = require('./swap');
  2. var isSorted = require('./isSorted');
  3. exports = function(arr) {
  4. var cmp =
  5. arguments.length > 1 && arguments[1] !== undefined
  6. ? arguments[1]
  7. : isSorted.defComparator;
  8. var len = arr.length;
  9. var gap = Math.floor(len / 2);
  10. while (gap > 0) {
  11. for (var i = gap; i <= len - gap; i++) {
  12. for (var j = i; j > 0; j -= gap) {
  13. if (cmp(arr[j], arr[j - gap]) < 0) {
  14. swap(arr, j, j - gap);
  15. } else {
  16. break;
  17. }
  18. }
  19. }
  20. gap = Math.floor(gap / 2);
  21. }
  22. return arr;
  23. };
  24. module.exports = exports;