dist-javascript-algorithms-and-data-structures
Version:
Algorithms and data-structures implemented on JavaScript
50 lines (35 loc) • 1.43 kB
JavaScript
;
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;