#coding=utf-8
import math
import random
def getRandomList(n):
i=0
lists=[]
while i<n:
lists.append(random.randint(1,100))
i+=1
return lists
def PARENT(i):
return (i//2)
def LEFT(i):
return 2*i
def RIGHT(i):
return 2*i+1
def swap(A,i,j):
r=A[i]
A[i]=A[j]
A[j]=r
def MAXHEAPIFY(A,i):
l=LEFT(i)
r=RIGHT(i)
if l<=Aheapsize and r<Aheapsize and A[l]>A[r]:
largest=l
else:
largest=i
if r<=Aheapsize and A[r]>A[largest]:
largest=r
if largest != i:
swap(A,i,largest)
MAXHEAPIFY(A,largest)
def BuildMaxHeap(A):
global Aheapsize
Aheapsize=len(A)
a=list(range(0,Aheapsize//2))
#a.reverse()
print(a)
for i in a:
print(i)
MAXHEAPIFY(A,i)
print("chongguohou")
print(A)
def HeapExtractMax(A):
if Aheapsize<1:
raise OverflowError
maxnum=A[1]
A[1]=A[Aheapsize]
Aheapsize=Aheapsize-1
MAXHEAPIFY(A,1)
return maxnum
def HeapIncreaseKey(A,i,key):
if key<A[i]:
raise OverflowError
A[i]=key
while i>1 and A[PARENT(i)]<A[i]:
swap(A[i],A[PARENT(i)])
i=PARENT(i)
def MaxHeapInsert(A,key):
Aheapsize=Aheapsize+1
A[Aheapsize]=-(math.inf)
HeapIncreaseKey(A,Aheapsize,key)
#A=getRandomList(10)
A=[1,2,3,4,7,8,9,10,14,16]
random.shuffle(A)
print(A)
BuildMaxHeap(A)
import math
import random
def getRandomList(n):
i=0
lists=[]
while i<n:
lists.append(random.randint(1,100))
i+=1
return lists
def PARENT(i):
return (i//2)
def LEFT(i):
return 2*i
def RIGHT(i):
return 2*i+1
def swap(A,i,j):
r=A[i]
A[i]=A[j]
A[j]=r
def MAXHEAPIFY(A,i):
l=LEFT(i)
r=RIGHT(i)
if l<=Aheapsize and r<Aheapsize and A[l]>A[r]:
largest=l
else:
largest=i
if r<=Aheapsize and A[r]>A[largest]:
largest=r
if largest != i:
swap(A,i,largest)
MAXHEAPIFY(A,largest)
def BuildMaxHeap(A):
global Aheapsize
Aheapsize=len(A)
a=list(range(0,Aheapsize//2))
#a.reverse()
print(a)
for i in a:
print(i)
MAXHEAPIFY(A,i)
print("chongguohou")
print(A)
def HeapExtractMax(A):
if Aheapsize<1:
raise OverflowError
maxnum=A[1]
A[1]=A[Aheapsize]
Aheapsize=Aheapsize-1
MAXHEAPIFY(A,1)
return maxnum
def HeapIncreaseKey(A,i,key):
if key<A[i]:
raise OverflowError
A[i]=key
while i>1 and A[PARENT(i)]<A[i]:
swap(A[i],A[PARENT(i)])
i=PARENT(i)
def MaxHeapInsert(A,key):
Aheapsize=Aheapsize+1
A[Aheapsize]=-(math.inf)
HeapIncreaseKey(A,Aheapsize,key)
#A=getRandomList(10)
A=[1,2,3,4,7,8,9,10,14,16]
random.shuffle(A)
print(A)
BuildMaxHeap(A)