You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

57 lines
1.2 KiB

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