#!/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)
参考连接:html