博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序
阅读量:6513 次
发布时间:2019-06-24

本文共 957 字,大约阅读时间需要 3 分钟。

hot3.png

package mainimport (	"fmt")//大顶堆 arr对应的索引应该是1,2,3....N,不然没法满足i*2特新,所以索引偏移1func adjust_dui(arr []int, len1 int) {	half := len1 / 2	for j := half; j > 0; j-- {		i := j * 2		last := j		for i <= len1 {			if i < len1 {				if arr[i-1] < arr[i] {					arr[i-1], arr[i] = arr[i], arr[i-1]				}			}			if arr[i-1] > arr[last-1] { //注意此处不是arr[j-1] 不然递归下去不能保证父节点最大				arr[i-1], arr[last-1] = arr[last-1], arr[i-1]			}			last = i			i *= 2		}	}}//调整堆进行排序func dui_sort(arr []int, len1 int) {	length := len1 - 1	for i := 0; i < len1; i++ {		arr[0], arr[length] = arr[length], arr[0]		adjust_dui(arr, length)		length--	}}func show_arr(arr []int) {	len1 := len(arr)	for i := 0; i < len1; i++ {		fmt.Printf("%d ", arr[i])	}	fmt.Printf("\n")}func main() {	var arr = []int{10, 5, 6, 19, 35, 24, 17, 5}	show_arr(arr)	adjust_dui(arr, len(arr)) //第一次也可以称之为创建堆	dui_sort(arr, len(arr)) //以后称之为堆调整	show_arr(arr)}

输出: 5 5 6 10 17 19 24 35

转载于:https://my.oschina.net/yang1992/blog/546812

你可能感兴趣的文章
程序猿知道英语词汇
查看>>
数据存储(两)--SAX发动机XML记忆(附Demo)
查看>>
谈谈SQL 语句的优化技术
查看>>
ecshop如何判断缓存文件是否能更新
查看>>
javascript于boolean类型转换,运营商&amp;&amp;和|| 返回值
查看>>
Socket tips: UDP Echo service - Client code
查看>>
深入分析面向对象中的封装作用
查看>>
深刻理解Python中的元类(metaclass)
查看>>
Java编程的逻辑 (44) - 剖析TreeSet
查看>>
address元素
查看>>
Android View体系(六)从源码解析Activity的构成
查看>>
详解ASP.NET Core Docker部署
查看>>
fnmatch源码阅读
查看>>
U9249 【模板】BSGS
查看>>
单片机小白学步系列(九) 用万用焊板搭建实验电路
查看>>
Tomcat PK Resin
查看>>
(转)全文检索技术学习(三)——Lucene支持中文分词
查看>>
Node.js+Koa开发微信公众号个人笔记(一)准备工作
查看>>
Android 图片缓存处理
查看>>
阿里盒马领域驱动设计实践
查看>>