2019独角兽企业重金招聘Python工程师标准>>>

项目中有个模块要大量任务需要控制超时,内部实现了个定时器组件,底层就是基于最小堆算法和时间轮。最小堆算法挺简单的,一个完全二叉树,每个非叶子节点比其两个子节点都小,这就是个最小堆。

该文章后续仍在不断的更新修改中, 请移步到原文地址http://dmwan.cc

实现代码如下:

package mainimport ("fmt"
)func heapSort(input []int){inputLen := len(input)if inputLen == 0 {return}for i:=0; i<inputLen; i++{minAjust(input[i:])}
}func minAjust(input []int){inputLen := len(input)if inputLen <= 1{return}for i:= inputLen/2 -1; i>=0; i--{if (2*i+1 <= inputLen-1) && (input[i] >= input[2*i+1]){input[i], input[2*i+1] = input[2*i+1], input[i]}if (2*i+2<= inputLen-1) && (input[i] >= input[2*i+2]){input[i], input[2*i+2] = input[2*i+2], input[i]}}
}func main (){testSlice := []int {2,3,1,4,5,6,2,1,23,43,1,32,3,5,2,1,8,54,4,0}fmt.Println(testSlice)heapSort(testSlice)fmt.Println(testSlice)
}

满足公式 A[i]<A[2*i+1] &&A[i]<A[2*i+2] 即可,这个如果想不起来,画画图就ok。

转载于:https://my.oschina.net/u/2950272/blog/1821793

golang 最小堆排序实现相关推荐

  1. 数据结构----------实现最小堆排序

    数据结构----------实现最小堆排序 原理: 来源于---------------趣学数据结构 代码: #include<stdio.h> #include<stdlib.h& ...

  2. java堆按照最小排序_java.util.TaskQueue的最小堆排序算法的应用

    其中fixup和fixdown就是堆排序的使用. /** * This class represents a timer task queue: a priority queue of TimerTa ...

  3. 读《程序员编程艺术》之自造Java版本----最大堆排序实现最小K问题

    在<程序员编程艺术>中有求最小k的最大堆排序算法,通过JAVA进行了实现,并输出结果. 在实现的过程中,尤其是最大堆中,自顶向下的更新是最容易出错的,本程序中巧妙的使用i和j的关系(父节点 ...

  4. 白话经典算法系列之七 堆与堆排序

     堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先解说下什么是数据结构中的二叉堆. 二叉堆的定义 二叉堆是全然二叉树或者是近似全然二叉树. 二叉堆满 ...

  5. python使用heapq快速查找最大或最小的 N 个元素

    python使用heapq快速查找最大或最小的 N 个元素 heapq实现了一个适合与Python的列表一起使用的最小堆排序算法. 堆是非线性的树形的数据结构,有两种堆,最大堆与最小堆.( heapq ...

  6. leetcode 703. 数据流中的第K大元素 最小堆解法 c语言

    如题: 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含 ...

  7. 数据结构之排序算法(一)-堆排序

    继上篇文章讲到堆的实现之后http://blog.csdn.net/tuke_tuke/article/details/50357939,下面可以使用堆来实现堆排序. 在堆的基础上实现堆排序的思路很简 ...

  8. python分配 使最大的最小_python3中的heapq模块使用

    ###heapq-堆排序算法 heapq实现了一个适合与Python的列表一起使用的最小堆排序算法. 二叉树 树中每个节点至多有两个子节点 满二叉树 树中除了叶子节点,每个节点都有两个子节点 什么是完 ...

  9. C#:TopK:1万个数取前最大的100,堆排序

    把1万个数字的前100个 首先放入数组,构成最小堆 再循环100到一万之间的. 每次循环判断当前数字是否大于ary[0] 当大于时,首先把头节点remove,再把当前数字放入ary[0], 在那100 ...

  10. 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较

    掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间.每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中 ...

最新文章

  1. html设置table border,用css来设置table的border
  2. 《死亡笔记》与绵球方块先生
  3. 2020年中国在线少儿英语培训市场研究报告
  4. java base64转文件_JAVA将Base64转为文件并保存详解
  5. asp.net web新闻发布系统_Web.config在渗透中的作用
  6. 根据录入的计算公式计算_预制桩极限承载力标准值快速计算方法研究
  7. 批量删除2012年9月份以前的表
  8. QT与Coin3D实现机器人的仿真
  9. 群晖7.X关闭双重验证(OTP)的方法
  10. matlab的double和single类型
  11. SAP与 WebService接口的配置与调用
  12. python这个单词的含义是什么_python style是什么意思
  13. Lecture06:市场出清问题的鲁棒方法
  14. QQ群排名优化到霸屏的策略怎么做?
  15. c++怎么判断系统是64位还是32位
  16. 国产手机干翻苹果?原来是靠百元机和猛降价实现的
  17. java中default关键字_Java 中的 default 关键字及代码示例
  18. 放下手机,我得到了什么?
  19. python安装及模块安装
  20. Android权限申请哪些需要动态申请

热门文章

  1. python axis=1是行吗_Python:axis=0 axis=1的理解
  2. FFmpeg总结(十一)用ffmpeg进行转格式,Android下播放网络音频流
  3. Android Multimedia框架总结(十五)Camera框架之Camera2补充
  4. 诸葛io的技术架构图_阿里P8总结三面四轮技术面试:Tomcat+Redis+线程池锁+悲观锁+NIO...
  5. matlab 正弦波 fft,【求助】正弦信号序列fft频谱分析!!!
  6. j2ee 现在已经改名为java ee_Java EE 已经正式更名为 Jakarta EE(雅加达)
  7. 32位oracle_ORACLE如何优化代码将查询速度从5s提升到0.1s
  8. ATM取款机java的实现--练习代码
  9. SQL Server2008函数大全(完整版)
  10. python实训报告pygame_20192418 2019-2020-2 《Python程序设计》实验4报告