/** * */ var ShellSort = function() { this.instructions = []; }; ShellSort.prototype = Object.create(Sorter.prototype); /** * */ ShellSort.prototype.sort = function(arr) { var len = arr.length; var gap = Math.floor(len / 3); var i, j; for (i = 0; i < gap; i++) { this.gapSort(arr, i, gap); } var IS = new InsertionSort(); IS.sort(arr); return arr; }; /** * */ ShellSort.prototype.gapSort = function(arr, start, gap) { var i, j; var len = arr.length; // console.log(`start ${start}, gap ${gap}`) for (i = start; i < len; i += gap) { // console.log(`i: ${i}`) for (j = i; j > start; j -= gap) { // console.log(`j: ${j}`) // console.log(`checking if ${arr[j - gap].value} > ${arr[j].value}`) if (arr[j - gap].value > arr[j].value) { // console.log(`swapping ${arr[j - gap].value} and ${arr[j].value}`) tmp = arr[j - gap]; arr[j - gap] = arr[j]; arr[j] = tmp; // console.log(dump(arr)); } else { break; } } } // console.log(dump(arr)); };