栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

go 堆排序

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

go 堆排序

func left(i int) int {
return 2*i + 1
}

func right(i int) int {
return 2*i + 2
}

//建堆
func buildHeap(a []float64) {
length := len(a)
for i := length / 2; i >= 0; i-- {
maxHeap(i, a, length)
}
}

//堆化,保证每个父节点都大于子节点
func maxHeap(p int, a []float64, length int) {
l := left§
r := right§
index := p
if l < length && a[l] > a[index] {
index = l
}
if r < length && a[r] > a[index] {
index = r
}
if index != p {
a[index], a[p] = a[p], a[index]
maxHeap(index, a, length)
}
}

func main(){
a := []int{1, 5, 6, 4, 7, -8, 77, -9, 6, 1, 0, 3}
buildHeap(a)
fmt.Println(a)
length := len(a)
//堆排,父节点是最大的,每次将父节点放到最后一个元素,再将剩余元素堆化
for length > 0 {
a[0], a[length-1] = a[length-1], a[0]
length–
maxHeap(0, a, length)
}
fmt.Println(a)
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944615.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号