国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湖北省| 九江县| 孝义市| 樟树市| 布拖县| 虹口区| 壤塘县| 福州市| 黄陵县| 黄山市| 平乡县| 拉萨市| 正镶白旗| 许昌市| 和平县| 青海省| 娄烦县| 新巴尔虎左旗| 邹平县| 通城县| 集安市| 清水县| 淮北市| 平利县| 迁西县| 南召县| 仁寿县| 阿巴嘎旗| 马公市| 南漳县| 全南县| 新兴县| 马龙县| 大英县| 平南县| 孟连| 永修县| 兰坪| 公主岭市| 陵水| 阿拉善右旗|