日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python天天美味(32) - python数据结构与算法之堆排序

發布時間:2023/12/20 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python天天美味(32) - python数据结构与算法之堆排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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詳解 ?

轉載于:https://www.cnblogs.com/coderzh/archive/2008/09/22/1296195.html

總結

以上是生活随笔為你收集整理的Python天天美味(32) - python数据结构与算法之堆排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。