# -*- coding: utf-8 -*-
"""
Created on Fri Apr 27 15:10:04 2018
"""
Created on Fri Apr 27 15:10:04 2018
@author: liuhuan
"""
def Max_change(heap,size,root):
left=2*root+1
right=left+1
maxnode=root
if right<size and heap[maxnode]<heap[right]:#一定要用heap[maxnode],因为有可能父节点比左右子节点都小
maxnode=right
if left<size and heap[maxnode]<heap[left]:
maxnode=left
if root!=maxnode:
heap[root],heap[maxnode]=heap[maxnode],heap[root]
Max_change(heap,size,maxnode)#有调整会影响最大堆,所以重新比较形成最大堆,先在这里比较
def Build_Max_Heap(heap):
for i in range((len(heap)-2)//2,-1,-1):
Max_change(heap,len(heap),i)
def Heap_Sort(heap):
Build_Max_Heap(heap)
for i in range(len(heap)-1,-1,-1):
heap[0],heap[i]=heap[i],heap[0]
Max_change(heap,i,0)
if __name__=='__main__':
a=[30,50,57,77,62,78,94,80,84]
Heap_Sort(a)
print(a)
"""
def Max_change(heap,size,root):
left=2*root+1
right=left+1
maxnode=root
if right<size and heap[maxnode]<heap[right]:#一定要用heap[maxnode],因为有可能父节点比左右子节点都小
maxnode=right
if left<size and heap[maxnode]<heap[left]:
maxnode=left
if root!=maxnode:
heap[root],heap[maxnode]=heap[maxnode],heap[root]
Max_change(heap,size,maxnode)#有调整会影响最大堆,所以重新比较形成最大堆,先在这里比较
def Build_Max_Heap(heap):
for i in range((len(heap)-2)//2,-1,-1):
Max_change(heap,len(heap),i)
def Heap_Sort(heap):
Build_Max_Heap(heap)
for i in range(len(heap)-1,-1,-1):
heap[0],heap[i]=heap[i],heap[0]
Max_change(heap,i,0)
if __name__=='__main__':
a=[30,50,57,77,62,78,94,80,84]
Heap_Sort(a)
print(a)