基于JavaScript實(shí)現(xiàn)的希爾排序算法分析
本文實(shí)例講述了基于JavaScript實(shí)現(xiàn)的希爾排序算法。分享給大家供大家參考,具體如下:
通過對(duì)直接插入排序的分析,可知其時(shí)間復(fù)雜度為O(n2),但是,如果待排序序列為正序時(shí),其時(shí)間復(fù)雜度可提高至O(n)。希爾排序正是對(duì)此進(jìn)行改進(jìn)的排序。希爾排序的核心理念與插入排序不同,它會(huì)首先比較距離較遠(yuǎn)的元素,而非相鄰元素。通過定義一個(gè)間隔序列來表示在排序過程中進(jìn)行比較的元素之間有多遠(yuǎn)的間隔。
下圖演示了希爾排序中間隔序列是如何運(yùn)行的:

下面我們通過js來實(shí)現(xiàn)希爾排序,代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JavaScript希爾排序</title>
</head>
<body>
<script type="text/javascript">
function shellSort(nums){//希爾排序
var gaps=[5,3,1];//定義間隔區(qū)間
for(var g=0;g<gaps.length;g++){//一個(gè)一個(gè)間隔值開始
for(var i=gaps[g];i<nums.length;i++){//以間隔值遍歷
var temp=nums[i];//選中元素
for(var j=i;j>=gaps[g]&&nums[j-gaps[g]]>temp;j-=gaps[g]){//如果前面一個(gè)大于后面一個(gè)
nums[j]=nums[j-gaps[g]];//后移
}
nums[j]=temp;//填補(bǔ)
}
}
}
function show(nums){//顯示數(shù)組
for(var i=0;i<nums.length;i++){
document.write(nums[i]+' ');
}
document.write('<br>');
}
var nums=[6,0,2,9,3,5,8,0,5,4];
show(nums);//6 0 2 9 3 5 8 0 5 4
shellSort(nums);//希爾排序
show(nums);//0 0 2 3 4 5 5 6 8 9
</script>
</body>
</html>
其排序過程如下:

希爾排序根據(jù)間隔序列的選取不同,時(shí)間復(fù)雜度也不同,但是需要注意,應(yīng)該使間隔序列中的值沒有除1以外的公因子,并且最后一個(gè)間隔值必須等于1。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
js 彈出對(duì)話框(遮罩)透明,可拖動(dòng)的簡單實(shí)例
下面小編就為大家?guī)硪黄猨s 彈出對(duì)話框(遮罩)透明,可拖動(dòng)的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-07-07
@ResponseBody 和 @RequestBody 注解的區(qū)別
這篇文章主要介紹了@ResponseBody 和 @RequestBody 注解的區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-03-03
Bootstrap實(shí)現(xiàn)導(dǎo)航欄的2種方式
這篇文章主要為大家詳細(xì)介紹了Bootstrap實(shí)現(xiàn)導(dǎo)航欄的2種方式,一是利用按鈕組實(shí)現(xiàn)、二是Bootstrap專門做了相應(yīng)的css類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
詳解微信小程序-掃一掃 wx.scanCode() 掃碼大變身
這篇文章主要介紹了微信小程序-掃一掃wx.scanCode() 掃碼大變身,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
JavaScript實(shí)現(xiàn)圖片合成下載的示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)圖片合成下載的示例,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下2020-11-11

