python3堆排序_python 堆排序
堆排序
堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆積是一個近似完全二叉樹的結構,并同時滿足堆積的性質:即子結點的鍵值或索引總是小于(或者大于)它的父節點(但是不保證所有左子樹比右子樹小反之亦然)。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法:
大頂堆:每個節點的值都大于或等于其子節點的值,在堆排序算法中用于升序排列;
小頂堆:每個節點的值都小于或等于其子節點的值,在堆排序算法中用于降序排列;
堆排序的平均時間復雜度為 Ο(nlogn)。
算法步驟
創建一個堆 H[0……n-1];(**對非葉子節點的子節點進行調節,構建堆**)
把堆首(最大值)和堆尾互換;
把堆的尺寸縮小 1,并調用 shift_down(0),目的是把新的數組頂端數據調整到相應位置;
重復步驟 2,直到堆的尺寸為 1。
Python 代碼實現
def buildMaxHeap(arr):
import math
for i in range(math.floor(len(arr)/2),-1,-1):#構建堆由下往上構建所以用-1
heapify(arr,i)
def heapify(arr, i):
left = 2*i+1
right = 2*i+2
largest = i
if left < arrLen and arr[left] > arr[largest]:
largest = left
if right < arrLen and arr[right] > arr[largest]:
largest = right
if largest != i:
swap(arr, i, largest)
heapify(arr, largest)
def swap(arr, i, j):
arr[i], arr[j] = arr[j], arr[i]
def heapSort(arr):
global arrLen
arrLen = len(arr)
buildMaxHeap(arr)
for i in range(len(arr)-1,0,-1):
swap(arr,0,i)
arrLen -=1 #每次踢掉求出的最大值
heapify(arr, 0)
return arr
總結
以上是生活随笔為你收集整理的python3堆排序_python 堆排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssh 连接服务器_使用 SSH Key
- 下一篇: python从低到高排序_使用pytho