'''
特性:
1.最大堆的堆顶是整个堆中的最大元素
2.最小堆的堆顶是整个堆中的最小元素
堆排序算法的步骤:
1.把无序数组构建成二叉堆。需要从小到大排序,则构建成最大堆;需要从大到小排序,则构建成最小堆。
2.循环删除堆顶元素,替换到二叉堆的末尾,调整堆产生新的堆顶。
'''
def downAdjust(string,parentIndex,length):
#temp保存父节点值,用于最后的赋值
temp=string[parentIndex]
childIndex=parentIndex*2+1
while childIndex<length:
#如果有右孩子,且右孩子大于左孩子的值,则定位到右孩子
if(childIndex+1<length and string[childIndex+1]>string[childIndex]):
childIndex+=1
#如果父节点大于任何一个孩子的值,则直接跳出
if(temp>=string[childIndex]):
break
string[parentIndex]=string[childIndex]
parentIndex=childIndex
childIndex=parentIndex*2+1
string[parentIndex]=temp
def headSort(string):
#把无序数组构建成最大堆
b=int((len(string) - 2) / 2)
for i in range(b,-1,-1):
downAdjust(string,i,len(string))
print(string)
#循环删除堆顶元素
for j in range(len(string)-1,0,-1):
temp=string[j]
string[j]=string[0]
string[0]=temp
downAdjust(string,0,j)
string=[1,3,2,6,5,7,8,9,10]
headSort(string)
print(string)
数据结构之堆排序(python实现)
最新推荐文章于 2020-09-07 22:09:14 发布