什么是希尔排序?
希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。
希尔排序基本思想
比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想。算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。接下来是JS代码实现`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
//希尔排序算法
function shellSort(arr){//希尔排序
var gaps=[5,3,1];//定义间隔区间
for(var g=0;g<gaps.length;g++){//一个一个间隔值开始
for(var i=gaps[g];i<arr.length;i++){//以间隔值遍历
var temp=arr[i];//选中元素
for(var j=i;j>=gaps[g]&&arr[j-gaps[g]]>temp;j-=gaps[g]){//如果前面一个大于后面一个
arr[j]=arr[j-gaps[g]];//后移
}
arr[j]=temp;//填补
}
}
return arr
}
//生成随机数组
function random(){
var arr = []
for(var i = 0;i<20;i++){
var num = parseInt(Math.random()*100+10)
arr.push(num)
}
return arr
}
var arr = random()
console.log(arr)
console.log(shellSort(arr))
</script>
</head>
<body>
</body>
</html>
以下是浏览器控制台截图