Python天天美味(32) - python数据结构与算法之堆排序
生活随笔
收集整理的這篇文章主要介紹了
Python天天美味(32) - python数据结构与算法之堆排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 選擇排序
選擇排序原理是先選出最小的數,與第一個數交換,然后從第二個數開始再選擇最小的數與第二個數交換,……
??? 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. 堆排序
堆排序的原理將數組調整成堆,然后將堆頂元素與最后一個元素交換,然后將最后一個節點剔除出堆,再將剩下的數組調整成堆,然后再交換堆頂元素與最后一個元素……
??? 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. 效率
堆排序的效率還是蠻高的,結果如下:
heap_sort 0:00:00.157000
?
Python 天天美味系列(總)
Python 天天美味(30) - python數據結構與算法之快速排序?
Python 天天美味(31) - python數據結構與算法之插入排序?
Python 天天美味(32) - python數據結構與算法之堆排序?
Python 天天美味(33) - 五分鐘理解元類(Metaclasses)[轉]
Python 天天美味(34) - Decorators詳解 ?轉載于:https://www.cnblogs.com/coderzh/archive/2008/09/22/1296195.html
總結
以上是生活随笔為你收集整理的Python天天美味(32) - python数据结构与算法之堆排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SnipperImages(Silver
- 下一篇: IDC运维团队技术交流总结篇————换个