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

來源:互聯網
上載者:User
文章目錄
  • 1. 選擇排序
  • 2. 堆排序
  • 3. 效率
1. 選擇排序

選擇排序原理是先選出最小的數,與第一個數交換,然後從第二個數開始再選擇最小的數與第二個數交換,……

def selection_sort(data):
    for i in range(len(data) - 1):
        min = data[i]
        k = i
        for j in range(i, len(data)):
            if data[j] < min:
                min = data[j]
                k = j
        if i <> k:
            data[i], data[k] = data[k], data[i]

2. 堆排序

堆排序的原理將數組調整成堆,然後將堆頂元素與最後一個元素交換,然後將最後一個節點剔除出堆,再將剩下的數組調整成堆,然後再交換堆頂元素與最後一個元素……

def heap_adjust(data, s, m):
    if 2 * s > m:
        return
    temp = s - 1
    if data[2*s - 1] > data[temp]:
        temp = 2 * s - 1
    if 2 * s <= m - 1 and data[2*s] > data[temp]:
        temp = 2 * s
    if temp <> s - 1:
        data[s - 1], data[temp] = data[temp], data[s - 1]
        heap_adjust(data, temp + 1, m)
def heap_sort(data):
    m = len(data) / 2
    for i in range(m, 0, -1):
        heap_adjust(data, i, len(data))
    data[0], data[-1] = data[-1], data[0]
    for n in range(len(data) - 1, 1, -1):
        heap_adjust(data, 1, n)
        data[0], data[n - 1] = data[n - 1], data[0]

3. 效率

堆排序的效率還是蠻高的,結果如下:

selection_sort 0:00:02.219000
heap_sort 0:00:00.157000

 

Python 天天美味系列(總)

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

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

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

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

Python 天天美味(34) - Decorators詳解  

相關文章

聯繫我們

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