堆排序算法:
def HeapSort(a):
global heapsize
BuildMaxHeap(a)
i = len(a)-1
while i >= 1:
a[0], a[i] = a[i], a[0]
heapsize -= 1
MaxHeapify(a, 0)
i -= 1
主要步骤如下:
1.建堆(得到最大堆)
def BuildMaxHeap(a):
global heapsize
heapsize = len(a)
i = math.floor(len(a)/2)-1
while i >= 0:
MaxHeapify(a, i)
i -= 1
2.交换元素(最大元素定位)
3.最大堆维护(子序列中【除去上一步的最大元素】,最大堆性质被破坏了),然后回到第3步
def MaxHeapify(a, i):
global heapsize
l = 2*i+1
r = 2*i+2
if l < heapsize and a[l] > a[i]:
largest = l
else:
largest = i
if r < heapsize and a[r] > a[largest]:
largest = r
if largest != i:
a[