#coding = utf-8
class HeapSort :
def __init__(self):
self.arr = [4,6,8,5,9]
self.arr = self.sort(self.arr)
print(self.arr)
def sort(self,arr):
#1.构建大顶堆
for i in range(len(arr)//2-1,-1,-1):
#从第一个非叶子结点从下至上,从右至左调整结构
arr=self.adjustHeap(arr,i,len(arr))
#2.调整堆结构+交换堆顶元素与末尾元素
for j in range(len(arr)-1,-1,-1):
#将堆顶元素与末尾元素进行交换
temp=arr[0]
arr[0] = arr[j]
arr[j] = temp
arr = self.adjustHeap(arr,0,j)#重新对堆进行调整
return arr
'''
* 调整大顶堆(仅是调整过程,建立在大顶堆已构建的基础上)
'''
def adjustHeap(self,arr,i,length):
temp = arr[i]#先取出当前元素i
k=i*2+1#从i结点的左子结点开始,也就是2i+1处开始
while k<length:
if k+1<length and arr[k]<arr[k+1]:#如果左子结点小于右子结点,k指向右子结点
k+=1
if arr[k] > temp:#如果子节点大于父节点,将子节点值赋给父节点(不用进行交换)
arr[i] = arr[k]
i = k
else:
break
k=k*2+1
arr[i] = temp#将temp值放到最终的位置
return arr
A = HeapSort()
【日常】-堆排序
最新推荐文章于 2024-03-30 01:20:53 发布