希尔排序的基本思想:
(1)选择一个希尔增量序列t1,t2,…,tk,(递减序列,tk=1)
(2)按增量序列个数k,对序列进行k 趟排序,
每趟排序,根据对应的增量ti,将待排序列分割成若干子序列,分别对各子序列进行插入排序。
当且仅当增量为1 时,整个序列合成为一组,构成一组有序数字,完成排序。
说明:
(1)希尔增量的起始值不超过整个序列的长度,并且最好选择素数(由经验得出,学者可以尝试一下)。
(2)希尔增量序列是递减的,递减规律自行确定,但一定要保证最后一个希尔增量值为1。
<script type="text/javascript"> var arr = [9, 1, 2, 5, 7, 4, 8, 6, 3, 5]; //初始化数组 var half = parseInt(arr.length / 2); //设置增量为原数组长度的一半 //控制增量 for (var gap = half; gap >= 1; gap = parseInt(gap / 2)) { console.log('--------gap' + gap); //检查增量gap的值 //循环整个数组 for (var i = gap; i < arr.length; i++) { // console.log(arr[i]);//检验循环遍历的次数 //循环每个小组内的数字 for (var j = i - gap; j >= 0; j = j - gap) { // console.log(j, j - gap); console.log(j, arr[j], arr[j + gap]); //索引,用来比较的两个值 //比较大小,交换位置 if (arr[j] > arr[j + gap]) { var temp = arr[j]; arr[j] = arr[j + gap]; arr[j + gap] = temp; } } console.log('+++++++++++') } } console.log(arr); </script>
这是我所学到的,所以我要分享给你们,希望可以帮助到你们。
以上就是我的分享,新手上道,请多多指教(大神勿喷)。