go_排序算法_堆排序
2021-06-10 00:02
标签:调整 核心 info inf last 图片 lib pac 序列 ? 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 核心思路: 1、depth := length/2 - 1 //节点深度,n,2n+1,2n+2 2、递归思想,找出最大值放在根节点首位,之后首尾交换位置 参考网站: go_排序算法_堆排序 标签:调整 核心 info inf last 图片 lib pac 序列 原文地址:https://www.cnblogs.com/ydg-941020/p/14484653.html1.5 堆排序
1.5.2 算法描述
1.5.3 动图演示
1.5.4 代码实现
package main
import "fmt"
func HeapSort(arr []int) []int {
length := len(arr)
for i := 0; i = 0; i-- {
topmax := i
//left right 代表非叶子节点
left := 2*i + 1
right := 2*i + 2
if left arr[topmax] { //防止越界
topmax = left
}
if right arr[topmax] {
topmax = right
}
if topmax != i {
arr[i], arr[topmax] = arr[topmax], arr[i]
}
}
return arr
}
}
func main() {
arr := []int{15, 21, 0, 23, 8, -1}
fmt.Print(HeapSort(arr))
}
https://www.bilibili.com/video/BV114411D768
https://www.bilibili.com/video/BV1hJ411j7gD?p=24
上一篇:go_排序算法_奇偶排序
下一篇:关于KMP算法(c++实现)