Python天天美味(31) – python資料結構與演算法之插入排序

來源:互聯網
上載者:User
文章目錄
  • 1. 直接插入排序
  • 2. 希爾排序
  • 3. 效能比較
1. 直接插入排序

插入排序演算法思路是:
假定這個數組的序是排好的,然後從頭往後,如果有數比當前外層元素的值大,則將這個數的位置往後挪,直到當前外層元素的值大於或等於它前面的位置為止.這具演算法在排完前k個數之後,可以保證a[1…k]是局部有序的,保證了插入過程的正確性.

def insert_sort(data):
    for i in range(1, len(data)):
        temp = data[i]    #data[i] is to insert
        j = i - 1
        while j >= 0 and temp < data[j]:
            data[j + 1] = data[j]
            j = j - 1
        if j <> i - 1:
            data[j + 1] = temp     #insert temp

2. 希爾排序

希爾排序(Shell Sort)是插入排序的一種。因D.L.Shell於1959年提出而得名。希爾排序基本思想是:
先取一個小於n的整數d1作為第一個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同一個組中。先在各組內進行直接插入排序;然後,取第二個增量d2<d1重複上述的分組和排序,直至所取的增量dt=1(dt< dt-l<…<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。

def shell_sort(data, n = None):
    if n == None:
        n = len(data) / 2
        if n % 2 == 0:
            n = n + 1
    for i in range(0, n):
        newdata = data[i:len(data):n]
        insert_sort(newdata)
        data[i:len(data):n] = newdata
    if n <> 1:
        d = n / 2
        if d % 2 == 0:
            d = d + 1
        shell_sort(data, d)

3. 效能比較

對2000個隨機數進行排序,比較直接插入排序、希爾排序、快速排序、冒泡排序的效能,結果如下 :

shell_sort 0:00:00.110000
insert_sort 0:00:01.391000
quick_sort 0:00:00.047000
bubble_sort 0:00:03.438000

效能排名如下:
快速排序 > 希爾排序 > 直接插入排序 > 冒泡排序

 

Python 天天美味系列(總)   

Python 天天美味(29) - 調用VC++的動態連結程式庫(DLL) 

Python 天天美味(30) - python資料結構與演算法之快速排序 

Python 天天美味(31) - python資料結構與演算法之插入排序 

Python 天天美味(32) - python資料結構與演算法之堆排序 

Python 天天美味(33) - 五分鐘理解元類(Metaclasses)[轉]

...

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.