国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現的堆排序算法原理與用法實例分析

2020-01-04 16:17:35
字體:
來源:轉載
供稿:網友

本文實例講述了Python實現的堆排序算法。分享給大家供大家參考,具體如下:

堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆是一個近似完全二叉樹的結構,并同時滿足堆性質:即子結點的鍵值或索引總是小于(或者大于)它的父節點。

具體代碼如下:

#-*- coding: UTF-8 -*-import numpy as npdef MakeHeap(a):  for i in xrange(a.size / 2 - 1, -1, -1):#對非葉子節點的子節點進行調節,構建堆    AdjustHeap(a, i, a.size)def AdjustHeap(a, i, n):  j = i*2 +1                     #選擇節點i的左子節點  x = a[i]                       #選擇節點的數值  while j < n:                    #循環對子節點及其子樹進行調整    if j + 1 < n and a[j+1] < a[j]:    #找到節點i子節點的最小值      j += 1    if a[j] >= x :                  #若兩個子節點均不小于該節點,則不同調整      break    a[i], a[j] = a[j], a[i]             #將節點i的數值與其子節點中最小者的數值進行對調    i = j                        #將i賦為改變的子節點的索引    j = i*2 + 1                   #將j賦為節點對應的左子節點def HeapSort(a):  MakeHeap(a)                 #構建小頂堆  for i in xrange(a.size - 1,0, -1):   #對堆中的元素逆向遍歷    a[i], a[0] = a[0], a[i]           #將堆頂元素與堆中最后一個元素進行對調,因為小頂堆中堆頂元素永遠最小,因此,輸出即為最小元素    AdjustHeap(a, 0, i)          #重新調整使剩下的元素仍為一個堆if __name__ == '__main__':  a = np.random.randint(0, 10, size = 10)  print "Before sorting..."  print "---------------------------------------------------------------"  print a  print "---------------------------------------------------------------"  HeapSort(a)  print "After sorting..."  print "---------------------------------------------------------------"  print a[::-1]                    #因為堆排序按大到小進行排列,采用a[::-1]對其按從小到大進行輸出  print "---------------------------------------------------------------"

運行結果:

Python,堆排序,算法

 

希望本文所述對大家Python程序設計有所幫助。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蓬溪县| 湘西| 图木舒克市| 十堰市| 温州市| 靖西县| 襄汾县| 元谋县| 隆回县| 轮台县| 安图县| 阜宁县| 化德县| 建瓯市| 饶河县| 莱西市| 讷河市| 梧州市| 五寨县| 双牌县| 龙江县| 崇州市| 商洛市| 咸宁市| 井陉县| 泰和县| 邛崃市| 从化市| 宜春市| 和龙市| 石棉县| 云龙县| 兴文县| 郧西县| 盘山县| 定西市| 本溪| 桃园县| 阳谷县| 习水县| 太保市|