#!/usr/bin/python
from sortCommon import swap
#下沉操作
def shiftDown(dataArray, i, size):
while(int(i*2+1)<size):
t = int(i*2+1)
if t+1 < size and dataArray[t+1] < dataArray[t]:
t+=1
if dataArray[i] > dataArray[t]:
swap(dataArray, i, t)
i = t
else:break
#建堆
def buildHeap(dataArray):
#对每一个非叶子节点进行下沉操作
for i in range(int(len(dataArray)/2)-1, -1, -1):
shiftDown(dataArray, i, len(dataArray))
def sort(dataArray):
heapSize = len(dataArray)
#建堆
buildHeap(dataArray)
while(heapSize > 1):
#把堆顶元素与最后一个元素交换,之后从堆中去掉最后一个元素,再对堆顶元素进行下沉操作
heapSize-=1
swap(dataArray, 0, heapSize)
shiftDown(dataArray, 0, heapSize)
参考链接:
https://www.cnblogs.com/JVxie/p/4859889.html
https://www.cnblogs.com/eniac12/p/5329396.html#s5