UNPKG

dist-javascript-algorithms-and-data-structures

Version:

Algorithms and data-structures implemented on JavaScript

50 lines (35 loc) 1.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _Sort = _interopRequireDefault(require("../Sort")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class ShellSort extends _Sort.default { sort(originalArray) { // Prevent original array from mutations. const array = [...originalArray]; // Define a gap distance. let gap = Math.floor(array.length / 2); // Until gap is bigger then zero do elements comparisons and swaps. while (gap > 0) { // Go and compare all distant element pairs. for (let i = 0; i < array.length - gap; i += 1) { let currentIndex = i; let gapShiftedIndex = i + gap; while (currentIndex >= 0) { // Call visiting callback. this.callbacks.visitingCallback(array[currentIndex]); // Compare and swap array elements if needed. if (this.comparator.lessThan(array[gapShiftedIndex], array[currentIndex])) { const tmp = array[currentIndex]; array[currentIndex] = array[gapShiftedIndex]; array[gapShiftedIndex] = tmp; } gapShiftedIndex = currentIndex; currentIndex -= gap; } } // Shrink the gap. gap = Math.floor(gap / 2); } // Return sorted copy of an original array. return array; } } exports.default = ShellSort;