news 2026/2/7 6:50:27

Go语言数据结构算法(二十五)堆排序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Go语言数据结构算法(二十五)堆排序

堆排序算法是一种流行且高效的排序算法.原理是将数组的元素可视化为一种特殊的完全二叉树.称为堆.

1.使用场景:

大型数据集:堆排序相对于大型数据集是有效的.因为其他算法开销对性能影响比较大.

内存分配:堆排序算法是一种就地排序.它不需要额外的内存来保存排序后的元素.

排序优先级队列:堆排序算法通常用于对优先级队列中的元素进行排序.这是一种数据结构.它维护一组元素.每个元素都有一个优先级.

2.实现:

2.1方法:

package data type MaxHeapData struct { slice []int heapSize int } func BuildMaxHeap(slice []int) MaxHeapData { m := MaxHeapData{slice, len(slice)} for i := len(slice) / 2; i >= 0; i-- { m.MaxHeapify(i) } return m } // 创建最大堆对象. func (m MaxHeapData) MaxHeapify(i int) { l, r := 2*i+1, 2*i+2 maxHeap := i if l < m.Size() && m.slice[l] > m.slice[maxHeap] { maxHeap = l } if r < m.Size() && m.slice[r] > m.slice[maxHeap] { maxHeap = r } if maxHeap != i { m.slice[i], m.slice[maxHeap] = m.slice[maxHeap], m.slice[i] m.MaxHeapify(maxHeap) } } func (m MaxHeapData) Size() int { return m.heapSize } // 定义队排序. func HeapSort(slice []int) []int { m := BuildMaxHeap(slice) for i := len(m.slice) - 1; i >= 1; i-- { m.slice[0], m.slice[i] = m.slice[i], m.slice[0] m.heapSize-- m.MaxHeapify(0) } return m.slice }

2.2main方法:

func main() { array := []int{33, 23, 56, 7, 8, 18, 99, 28} heapSort := data.HeapSort(array) fmt.Println(heapSort) }

3.实战:

3.1方法:
package data type MaxHeapData struct { slice []int heapSize int } func BuildMaxHeap(slice []int) []int { for i := len(slice) / 2; i >= 0; i-- { slice = MaxHeapify(slice, i) } return slice } func MaxHeapify(array []int, i int) []int { l, r := left(i)+1, right(i)+1 maxHeap := i if l < len(array) && l >= 0 && array[l] > array[maxHeap] { maxHeap = l } if r < len(array) && r >= 0 && array[r] > array[maxHeap] { maxHeap = r } if maxHeap != i { array[i], array[maxHeap] = array[maxHeap], array[i] MaxHeapify(array, maxHeap) } return array } func (m MaxHeapData) Size() int { return m.heapSize } // 定义队排序. func HeapSort(slice []int) []int { m := BuildMaxHeap(slice) size := len(m) for i := len(m) - 1; i >= 1; i-- { m[0], m[i] = m[i], m[0] size-- MaxHeapify(m[:size], 0) } return m } func left(i int) int { return 2 * i } func right(i int) int { return 2*i + 1 }
3.2main方法:
func main() { array := []int{33, 23, 56, 7, 8, 18, 99, 28} heapSort := data.HeapSort(array) fmt.Println(heapSort) }

仰天大笑出门去.

如果大家喜欢我的分享我的话.可以关注我的微信公众号

念何架构之路

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/6 22:20:45

Windows系统优化大师:一键解决卡顿、提升性能的终极指南

还在为Windows系统运行缓慢而烦恼吗&#xff1f;电脑开机慢如蜗牛&#xff0c;软件响应迟钝&#xff0c;存储空间告急&#xff1f;这些问题不仅影响工作效率&#xff0c;更让人心情烦躁。今天&#xff0c;我们将介绍一款专业的Windows系统优化工具&#xff0c;它能帮你一键修复…

作者头像 李华
网站建设 2026/2/7 8:57:33

百万Token革命:Qwen2.5-1M开源模型重构长文本处理范式

百万Token革命&#xff1a;Qwen2.5-1M开源模型重构长文本处理范式 【免费下载链接】Qwen2.5-14B-Instruct-1M 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen2.5-14B-Instruct-1M 导语 阿里云通义实验室正式开源Qwen2.5-1M系列大模型&#xff0c;首次将开源模…

作者头像 李华
网站建设 2026/2/7 0:19:59

终极指南:5分钟掌握网易云音乐数据备份方法

终极指南&#xff1a;5分钟掌握网易云音乐数据备份方法 【免费下载链接】InfoSpider INFO-SPIDER 是一个集众多数据源于一身的爬虫工具箱&#x1f9f0;&#xff0c;旨在安全快捷的帮助用户拿回自己的数据&#xff0c;工具代码开源&#xff0c;流程透明。支持数据源包括GitHub、…

作者头像 李华
网站建设 2026/2/6 8:30:39

B站视频下载新选择:bilili助你轻松备份心爱内容

B站视频下载新选择&#xff1a;bilili助你轻松备份心爱内容 【免费下载链接】bilili :beers: bilibili video (including bangumi) and danmaku downloader | B站视频&#xff08;含番剧&#xff09;、弹幕下载器 项目地址: https://gitcode.com/gh_mirrors/bil/bilili …

作者头像 李华
网站建设 2026/2/6 2:19:38

RPCS3模拟器中文补丁完美安装教程:轻松实现PS3游戏汉化体验

RPCS3模拟器中文补丁完美安装教程&#xff1a;轻松实现PS3游戏汉化体验 【免费下载链接】rpcs3 PS3 emulator/debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 想要在PC上畅玩中文版的PS3经典游戏吗&#xff1f;RPCS3模拟器通过其强大的补丁系统&…

作者头像 李华
网站建设 2026/2/6 18:12:08

YOLOv8 2025技术突破:端到端架构重构与六大行业落地全景

YOLOv8 2025技术突破&#xff1a;端到端架构重构与六大行业落地全景 【免费下载链接】yolov8s 项目地址: https://ai.gitcode.com/hf_mirrors/ultralyticsplus/yolov8s 导语 Ultralytics推出的YOLOv8通过端到端架构重构与轻量化设计&#xff0c;在保持53.7% COCO数据集…

作者头像 李华