【JavaScript演算法】---希爾排序

來源:互聯網
上載者:User

標籤:var   情況   javascrip   while   增量   bsp   item   數組   增量排序   

一、什麼是希爾排序

希爾排序(Shell‘s Sort)是插入排序的一種又稱“縮小增量排序”,是直接插入排序演算法的一種更高效的改進版本。 思路:     希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個檔案恰被分成一組,演算法便終止 邏輯:    在希爾排序中最重要的是分組,我們先找到一個間隔,每隔一定的間隔將這些數字排位一組,    假設有這樣一個數組 [9,1,2,5,7,4,8,6,3,5] ;我們每隔5個為一組。那麼這個數組被我們分成了以下幾組    第一組:9    4    第二組:1   8    第三組:2   6    第四組:5   3    第五組:7   5        分組完畢後我們在每隔組的組內進行排序       第一組: 4   9    第二組:1    8    第三組    2    6    第四組    3    5    第五組    5    7     排序後我們在將這個數組重新設間隔重新進行排序(下一次的間隔減半)  2個為一組    [4,1,2,3,5,9,8,6,5,7]         第一組:4  2  5  8   5   ==》組內排序   2 4 5 5 8     第二組:1  3  9  6   7   ==》組內排序   1 3 6 7 9         2  1  4  3  5  6  5  7  8  9         排序後我們在將這個數組重新設間隔重新進行排序(下一次的間隔減半)  1個為一組最後一次也就是兩兩比較        1  2  3  4  5   5  6  7  8  9     注意:間隔在希爾排序中一般是沒有特別的規定,通常情況下是數組長度的一半  二、代碼
var arr = [2,5,1,9,0]//算間隔var len = Math.floor(arr.length/2)while(len>0){    for(var i=len;i<arr.length;i++){        var temp = arr[i];        for(var j=i-len;j>=0&&temp<arr[j];j=j-len){            arr[j+len] = arr[j]        }        arr[j+len] = temp;    }    len = Math.floor(len/2)}

 

【JavaScript演算法】---希爾排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.