首页 > 编程知识 正文

数据结构堆排序算法(堆排序算法过程图解)

时间:2023-05-04 02:06:00 阅读:75955 作者:3571

堆排序算法golang实现文章目录堆排序算法golang实现算法描述算法过程代码

算法说明

算法说明:先建设堆,然后调整堆。 协调过程比较节点和子节点,以其中最大值为父节点,递归调整调整次数lgn,最后交换根节点和尾节点进行n次调整。

算法步骤建立萝卜堆或小根堆。

调整堆。

交换首尾一致的节点(为了维持完整的二叉树而进行最后的交换)。

代码实现1:

打包管理导入' fmt ' funcheapsortmax (arr [ ] int,length int ) []int(iflength1) returnarr ) depth3360=length/i-- {topmax :=i //假设最大位置位于I的位置leftchild 3360=2* i1 right child 3360=2* i2if leftchild=length-1 arr [ leftchild ] 边界top max=leftchild } ifrightchild=length-1 arr [ right child ] arr [ top max ] {//边界topmax=rightchild}if topmax=i {arr[i],arr[topmax]=arr[topmax],arr [ I ] } return arr } func heapsort [ ] int [ ] int { length 3333 } I lengtth I { Lastlen : } length-iheapsortmax (arr,lastlen ) ifIlength ) arr(0)、arr(lastlen )=arr ) Lastlen-1、arr

[ 125891012304563234 ] http://www.Sina.com /

packagemainimport ' fmt ' funcheapify (arr [ ] int,n int, i int () /堆维护largest :=i //i是当前父节点的下标lson :=i * 2 1 //左子rson :=i * 2 2 //右子iflsonnarr [ largest ]=i {arr[largest],arr[i]=arr[i],arr[largest]heapify(arr,n,largest ) } func heapsort [ arr ],int i=0 I--{heapify(arr,n,I ) }//排序for i :=n - 1; i 0; i-- {arr[i],arr[0]=arr[0],arr[I]heapify(arr,I,0 ) }}func main ) ) arr:=[]int ) 1,9,

[1 2 5 8 9 10 12 30 45 63 234]

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。