/** * */ 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); }; /** * */ 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)); };