使用JavaScript實現希爾排序
阿新 • • 發佈:2021-01-06
什麼是希爾排序?
希爾排序(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>
以下是瀏覽器控制檯截圖