import time
import datetime
import matplotlib.pyplot as plt
import numpy as np
def MAXSTACK(a,b,c):
if(b<c):
x=a[b-1]
if(2*b<c):
if(a[2*b]>a[b-1] and a[2*b]>a[2*b-1]):
tmp=a[b-1]
a[b-1]=a[2*b]
a[2*b]=tmp
if(a[2*b-1]>a[b-1] and a[2*b-1]>a[2*b]):
tmp=a[b-1]
a[b-1]=a[2*b-1]
a[2*b-1]=tmp
MAXSTACK(a,2*b,c)
MAXSTACK(a,2*b+1,c)
if(2*b==c):#本行因为b=0作为初始条件就进入死循环将b=1作为初始条件c也加1导致是这种情况
if(a[2*b-1]>a[b-1]):
tmp=a[b-1]
a[b-1]=a[2*b-1]
a[2*b-1]=tmp
MAXSTACK(a,2*b,c)
def STACKSORT(a,b,c):
if(c>=1):
tmp=a[b-1]
a[b-1]=a[c-1]
a[c-1]=tmp
MAXSTACK(a,b,c-1)
print(a)
STACKSORT(a,b,c-1)
a=[]
j=input()
j=int(j)
for h in range(0,j):
tmp=input()
tmp=int(tmp)
a.append(tmp)
size=j
MAXSTACK(a,1,j)
print(a)
STACKSORT(a,1,j)
print(a)
time.sleep(10)
算法导论(第六章堆排序)
最新推荐文章于 2024-11-16 21:36:47 发布