欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于JavaScript實(shí)現(xiàn)的希爾排序算法分析

 更新時間:2017年04月14日 10:23:49   作者:布瑞澤的童話  
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)的希爾排序算法,簡單分析了希爾排序的原理并結(jié)合實(shí)例形式給出了javascript實(shí)現(xiàn)希爾排序的操作步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了基于JavaScript實(shí)現(xiàn)的希爾排序算法。分享給大家供大家參考,具體如下:

通過對直接插入排序的分析,可知其時間復(fù)雜度為O(n2),但是,如果待排序序列為正序時,其時間復(fù)雜度可提高至O(n)。希爾排序正是對此進(jìn)行改進(jìn)的排序。希爾排序的核心理念與插入排序不同,它會首先比較距離較遠(yuǎn)的元素,而非相鄰元素。通過定義一個間隔序列來表示在排序過程中進(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++){//一個一個間隔值開始
      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]){//如果前面一個大于后面一個
          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ù)間隔序列的選取不同,時間復(fù)雜度也不同,但是需要注意,應(yīng)該使間隔序列中的值沒有除1以外的公因子,并且最后一個間隔值必須等于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錯誤與調(diào)試技巧總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

  • js 彈出對話框(遮罩)透明,可拖動的簡單實(shí)例

    js 彈出對話框(遮罩)透明,可拖動的簡單實(shí)例

    下面小編就為大家?guī)硪黄猨s 彈出對話框(遮罩)透明,可拖動的簡單實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • js中reverse函數(shù)的用法詳解

    js中reverse函數(shù)的用法詳解

    本篇文章主要是對js中reverse函數(shù)的用法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • @ResponseBody 和 @RequestBody 注解的區(qū)別

    @ResponseBody 和 @RequestBody 注解的區(qū)別

    這篇文章主要介紹了@ResponseBody 和 @RequestBody 注解的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Bootstrap實(shí)現(xiàn)導(dǎo)航欄的2種方式

    Bootstrap實(shí)現(xiàn)導(dǎo)航欄的2種方式

    這篇文章主要為大家詳細(xì)介紹了Bootstrap實(shí)現(xiàn)導(dǎo)航欄的2種方式,一是利用按鈕組實(shí)現(xiàn)、二是Bootstrap專門做了相應(yīng)的css類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • js獲取鍵盤按鍵響應(yīng)事件(兼容各瀏覽器)

    js獲取鍵盤按鍵響應(yīng)事件(兼容各瀏覽器)

    js獲取鍵盤按鍵響應(yīng)事件(兼容各瀏覽器),需要的朋友可以參考一下
    2013-05-05
  • Javascript 引擎工作機(jī)制詳解

    Javascript 引擎工作機(jī)制詳解

    我們需要引入幾個相關(guān)的概念:執(zhí)行環(huán)境棧、全局對象、執(zhí)行環(huán)境、變量對象、活動對象、作用域和作用域鏈等,這些概念正是JS引擎工作的核心組件。這篇文章的目的不是孤立的為你講解每一個概念需要的朋友可以參考下
    2016-11-11
  • JS實(shí)現(xiàn)京東商品分類側(cè)邊欄

    JS實(shí)現(xiàn)京東商品分類側(cè)邊欄

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)京東商品分類側(cè)邊欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 詳解微信小程序-掃一掃 wx.scanCode() 掃碼大變身

    詳解微信小程序-掃一掃 wx.scanCode() 掃碼大變身

    這篇文章主要介紹了微信小程序-掃一掃wx.scanCode() 掃碼大變身,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • javascript從作用域鏈談閉包

    javascript從作用域鏈談閉包

    這篇文章主要從作用域鏈談閉包,閉包(closure)是Javascript語言的一個難點(diǎn),也是它的特色,很多高級應(yīng)用都要依靠閉包實(shí)現(xiàn),本文針對閉包進(jìn)行學(xué)習(xí),需要的朋友可以參考下
    2015-12-12
  • JavaScript實(shí)現(xiàn)圖片合成下載的示例

    JavaScript實(shí)現(xiàn)圖片合成下載的示例

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)圖片合成下載的示例,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下
    2020-11-11

最新評論