最近在预习算法,这里把堆排序也预习一下,哈哈。分享给大家。最核心的是构建大顶堆的过程。
按照堆的特点可以把堆分为大顶堆和小顶堆
大顶堆:每个结点的值都大于或等于其左右孩子结点的值
小顶堆:每个结点的值都小于或等于其左右孩子结点的值
代码
class Solution():
def __init__(self):
super().__init__()
def adjust(self,arr,n,i):
largest=i
l=2*i+1
r=2*i+2
if(l
largest=l
if(r
largest=r
if(largest!=i):
arr[largest],arr[i]=arr[i],arr[largest]
self.adjust(arr,n,largest)
def solve(self,arr):
n=len(arr)
for i in range(n//2-1,-1,-1):
self.adjust(arr,n,i)
for i in range(n-1,0,-1):
arr[i],arr[0]=arr[0],arr[i]
self.adjust(arr,i,0)
return arr
if __name__ == "__main__":
solution=Solution()
arr=[1,2,10,4,1,4,3,3]
res=solution.solve(arr)
print(res)
参考文献
[1]. HeapSort. https://www.geeksforgeeks.org/heap-sort/
[2].堆排序. https://www.cnblogs.com/lanhaicode/p/10546257.html