参考答案:
希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。动态定义间隔序列的算法是《算法(第4版》的合著者Robert Sedgewick提出的。
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:
1function shellSort(arr) { 2 var len = arr.length, 3 temp, 4 gap = 1; 5 console.time('希尔排序耗时:'); 6 while(gap < len/5) { //动态定义间隔序列 7 gap =gap*5+1; 8 } 9 for (gap; gap > 0; gap = Math.floor(gap/5)) { 10 for (var i = gap; i < len; i++) { 11 temp = arr[i]; 12 for (var j = i-gap; j >= 0 && arr[j] > temp; j-=gap) { 13 arr[j+gap] = arr[j]; 14 } 15 arr[j+gap] = temp; 16 } 17 } 18 console.timeEnd('希尔排序耗时:'); 19 return arr; 20} 21var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]; 22console.log(shellSort(arr));//[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50] 23
最近更新时间:2024-07-22