国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基本算法學習(一)之希爾排序(JS)

cooxer / 3273人閱讀

摘要:動態定義間隔序列參考來源詳細介紹了十種算法大家可以去學習下以后大概會盡量每天更新一個算法學習吧溫故而知新

參考書:
嚴蔚敏-數據結構

希爾排序(Shell"s Sort)

希爾排序又稱"縮小增量排序",歸屬于插入排序一類,簡單來說,和我們的插入排序比,它更快.

奇妙的記憶點:

內排序(內存排序就夠了)

不穩定(排序后原始順序無法保證)

希爾排序重點在于分割.

基本思想:

將整個待排序記錄序列分割為若干個子序列,然后對每一個子序列進行直接插入排序.

直接插入排序:

不得不先講一下直接插入排序了,畢竟希爾排序要使用到直接插入排序.
直接插入算法重點在于分區,有序區與無序區.假設我們有一個數組arr

for(var i = 1;i0&&arr[j-1]>key){
        arr[j] = arr[j-1];
        j--;
    }
    arr[j]=key;
}

其中i=1,i~arr.len-1為我們的無序區,而i=0為我們的有序區.temp用于記錄無序區準備進入有序區的元素,j用于從右往左遍歷有序區并將元素往后推,找出相應的插入位置,將temp插入對應位置.

希爾排序:代碼

希爾排序關鍵在于增量的設置,根據增量分割數組并逐步進行直接插入排序,增量逐趟減少,并最后使得整個數組基本有序,再對整體進行直接插入排序.

記憶點

best condition: T(n) = O(n*log2 n)

baddest condition: T(n) = O(n*log2 n)

average condition: T(n) = O(n*log n)

基本的思路就是根據增量分割數組,如var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
我們增量為5,則分割為
[3,15,46]
[44,36,4]
[38,26,19]
[5,27,50]
[47,2,48]
并對每一組進行直接插入排序
再把增量變為2(減半),再進行分割,直到增量為1,再對全體進行一次直接插入排序就可以了.
簡略的代碼如下:

    var len =arr.length;
    gap = Math.floor(len/2);
    while(gap!==0){
        for(var i = gap;i=0&&temp

簡單說一下,i從gap位開始,那么每組的有序區已經確定了一位,接下來將i-gap位的數根據組的不同插入有序區,就完成了每組的直接插入排序了.

相關流程圖

動態定義間隔序列

這是我在掘金看來的

希爾排序的核心在于間隔序列的設定。既可以提前設定好間隔序列,也可以動態的定義間隔序列。動態定義間隔序列的算法是《算法(第4版》的合著者Robert Sedgewick提出的。

while(gap < len/5) { //動態定義間隔序列 
    gap =gap*5+1; 
}

參考來源:http://gold.xitu.io/post/57dc...
詳細介紹了十種算法,大家可以去學習下.

以后大概會盡量每天更新一個算法學習吧,溫故而知新

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80421.html

相關文章

  • JS中可能用得到的全部的排序算法

    本篇有7k+字, 系統梳理了js中常見的12種排序算法。除了基本排序算法,文章還包含了希爾排序、堆排序、桶排序等較為復雜的排序實現,如果喜歡請點贊支持~謝謝. 原文: http://louiszhai.github.io/20... 導讀 排序算法可以稱得上是我的盲點, 曾幾何時當我知道Chrome的Array.prototype.sort使用了快速排序時, 我的內心是奔潰的(啥是快排, 我只知道...

    verano 評論0 收藏0
  • 糊涂算法「八大排序」總結——用兩萬字,8張動圖,450行代碼跨過排序這道坎(建議收藏)

    摘要:今天,一條就帶大家徹底跨過排序算法這道坎,保姆級教程建議收藏。利用遞歸算法,對分治后的子數組進行排序。基本思想堆排序是利用堆這種數據結構而設計的一種排序算法,堆排序是一種選擇排序,它的最壞,最好,平均時間復雜度均為,它也是不穩定排序。 ...

    greatwhole 評論0 收藏0
  • 排序算法(Java)——那些年面試常見的排序算法

    摘要:下面會介紹的一種排序算法快速排序甚至被譽為世紀科學和工程領域的十大算法之一。我們將討論比較排序算法的理論基礎并中借若干排序算法和優先隊列的應用。為了展示初級排序算法性質的價值,我們來看一下基于插入排序的快速的排序算法希爾排序。 前言   排序就是將一組對象按照某種邏輯順序重新排列的過程。比如信用卡賬單中的交易是按照日期排序的——這種排序很可能使用了某種排序算法。在計算時代早期,大家普遍...

    Harpsichord1207 評論0 收藏0
  • JavaScript 數據結構與算法美 - 歸并排序、快速排序希爾排序、堆排序

    摘要:之所以把歸并排序快速排序希爾排序堆排序放在一起比較,是因為它們的平均時間復雜度都為。歸并排序是一種穩定的排序方法。因此,快速排序并不穩定。希爾排序思想先將整個待排序的記錄序列分割成為若干子序列。 showImg(https://segmentfault.com/img/bVbvpYZ?w=900&h=250); 1. 前言 算法為王。 想學好前端,先練好內功,只有內功深厚者,前端之路才...

    haitiancoder 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<