希尔排序就是插入排序的升级版,插入排序是就近比较,一直到最后,希尔排序就是跳跃式比较,如果两个差值很大的数字距离较远,这样希尔排序的效果就显露出来了。
//插入排序
function insertSort(arr) { var j = 0; for (var i = 1; i < arr.length; i++) { var temp = arr[i]; var k = i; while (k >= 0 && arr[k - 1] >= temp) { arr[k] = arr[k - 1]; k--; j++; } arr[k] = temp; } console.log(j, '比较次数') return arr; } //希尔排序 var p = 0; function shellsort(arr, gaps) { for (var g = 0; g < gaps.length; ++g) { for (var i = gaps[g]; i < arr.length; ++i) { var temp = arr[i]; var j = i; for (;j >= gaps[g] && arr[j - gaps[g]] > temp; j -= gaps[g]) { arr[j] = arr[j - gaps[g]]; p++; } arr[j] = temp; } } console.log(p, '比较次数') return arr; }