golang优先队列
参考博客:https://studygolang.com/articles/13173
基本类型排序
- package main
- import (
- "fmt"
- "sort"
- )
- func main() {
- intList := []int{, , , , , , , , , }
- floatList := []float64{4.2, 5.9, 12.3, 10.0, 50.4, 99.9, 31.4, 27.81828, 3.14}
- stringList := []string{"a", "c", "b", "d", "f", "i", "z", "x", "w", "y"}
- sort.Sort(sort.IntSlice(intList))
- sort.Sort(sort.Float64Slice(floatList))
- sort.Sort(sort.StringSlice(stringList))
- fmt.Printf("%v\n%v\n%v\n", intList, floatList, stringList)
- sort.Sort(sort.Reverse(sort.IntSlice(intList)))
- sort.Sort(sort.Reverse(sort.Float64Slice(floatList)))
- sort.Sort(sort.Reverse(sort.StringSlice(stringList)))
- fmt.Printf("%v\n%v\n%v\n", intList, floatList, stringList)
- }
结构体排序
- package main
- import (
- "fmt"
- "sort"
- )
- type Person struct {
- Name string // 姓名
- Age int // 年纪
- }
- // 按照 Person.Age 从大到小排序
- type PersonSlice []Person
- func (a PersonSlice) Len() int { // 重写 Len() 方法
- return len(a)
- }
- func (a PersonSlice) Swap(i, j int) { // 重写 Swap() 方法
- a[i], a[j] = a[j], a[i]
- }
- func (a PersonSlice) Less(i, j int) bool { // 重写 Less() 方法, 从小到大排序
- return a[i].Age < a[j].Age
- }
- func main() {
- people := []Person{
- {"zhang san", },
- {"li si", },
- {"wang wu", },
- {"zhao liu", },
- }
- fmt.Println(people)
- sort.Sort(PersonSlice(people)) // 按照 Age 的升序排序
- fmt.Println(people)
- sort.Sort(sort.Reverse(PersonSlice(people))) // 按照 Age 的降序排序
- fmt.Println(people)
- }
最小堆
- package main
- import (
- "container/heap"
- "fmt"
- )
- type IntHeap []int
- func (h IntHeap) Len() int { return len(h) }
- func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] }
- func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
- func (h *IntHeap) Push(x interface{}) {
- *h = append(*h, x.(int))
- }
- func (h *IntHeap) Pop() interface{} {
- old := *h
- n := len(old)
- x := old[n-]
- *h = old[ : n-]
- return x
- }
- func main() {
- h := &IntHeap{, , , , , , , }
- heap.Init(h)
- heap.Push(h, )
- fmt.Printf("minimum: %d\n", (*h)[])
- for h.Len() > {
- fmt.Printf("%d ", heap.Pop(h))
- }
- }
优先队列
- package main
- import (
- "container/heap"
- "fmt"
- )
- type stu struct {
- name string
- age int
- }
- type Stu []stu
- func (t *Stu) Len() int {
- return len(*t) //
- }
- func (t *Stu) Less(i, j int) bool {
- return (*t)[i].age < (*t)[j].age
- }
- func (t *Stu) Swap(i, j int) {
- (*t)[i], (*t)[j] = (*t)[j], (*t)[i]
- }
- func (t *Stu) Push(x interface{}) {
- *t = append(*t, x.(stu))
- }
- func (t *Stu) Pop() interface{} {
- n := len(*t)
- x := (*t)[n-]
- *t = (*t)[:n-]
- return x
- }
- func main() {
- student := &Stu{{"Amy", }, {"Dav", }, {"Spo", }, {"Reb", }}
- heap.Init(student)
- one := stu{"hund", }
- heap.Push(student, one)
- for student.Len() > {
- fmt.Printf("%v\n", heap.Pop(student))
- }
- }
golang优先队列的更多相关文章
- golang实现的简单优先队列
下面是golang实现的简单优先队列,参考信息可以查看https://golang.org/pkg/container/heap/或者https://golang.google.cn/pkg/cont ...
- 数据结构和算法(Golang实现)(24)排序算法-优先队列及堆排序
优先队列及堆排序 堆排序(Heap Sort)由威尔士-加拿大计算机科学家J. W. J. Williams在1964年发明,它利用了二叉堆(A binary heap)的性质实现了排序,并证明了二叉 ...
- 堆 堆排序 优先队列 图文详解(Golang实现)
引入 在实际应用中,我们经常需要从一组对象中查找最大值或最小值.当然我们可以每次都先排序,然后再进行查找,但是这种做法效率很低.哪么有没有一种特殊的数据结构,可以高效率的实现我们的需求呢,答案就是堆( ...
- 面试经典算法:优先队列,最大堆,堆排序,左偏树Golang实现
堆排序 使用优先队列-最小/最大堆可实现. 优先队列 优先队列是一种能完成以下任务的队列:插入一个数值,取出最小的数值(获取数值,并且删除).优先队列可以用二叉树来实现,我们称这种为二叉堆. 最小堆 ...
- golang中container/heap包源码分析
学习golang难免需要分析源码包中一些实现,下面就来说说container/heap包的源码 heap的实现使用到了小根堆,下面先对堆做个简单说明 1. 堆概念 堆是一种经过排序的完全二叉树,其中任 ...
- 数据流中的第k大元素的golang实现
设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中 ...
- golang模拟动态高优先权优先调度算法
实验二 动态高优先权优先调度 实验内容 模拟实现动态高优先权优先(若数值越大优先权越高,每运行一个时间单位优先权-n,若数值越小优先权越高,没运行一个时间单位优先权+n),具体如下: 设置进程体:进 ...
- 数据结构和算法(Golang实现)(25)排序算法-快速排序
快速排序 快速排序是一种分治策略的排序算法,是由英国计算机科学家Tony Hoare发明的, 该算法被发布在1961年的Communications of the ACM 国际计算机学会月刊. 注:A ...
- 数据结构和算法(Golang实现)(1)简单入门Golang-前言
数据结构和算法在计算机科学里,有非常重要的地位.此系列文章尝试使用 Golang 编程语言来实现各种数据结构和算法,并且适当进行算法分析. 我们会先简单学习一下Golang,然后进入计算机程序世界的第 ...
随机推荐
- 关于Session的概念和测试点
Session概要 Session 是用于保持状态的基于 Web 服务器的方法,在 Web 服务器上保持用户的状态信息供在任何时间从任何页访问. Session 允许通过将对象存储在 Web 服务器的 ...
- ubuntu搭建discuz论坛
a.安装mysql database 1.安装mysql服务端 sudo apt-get install mysql-server (在此过程中要求为mysql的root用户设置一个密码) 2.安装 ...
- 2016年蓝桥杯B组C/C++省赛(预选赛)试题
2016年蓝桥杯B组C/C++ 点击查看2016年蓝桥杯B组省赛题目解析(答案) 第一题:煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成 ...
- 【安装】Microsoft SQL Server的安装
数据库版本:2012 系统环境:windows 7 一.安装 依次选择“安装->全新 SQL Server 独立安装或向现有安装添加功能”;点“确定” 选择版本,推荐标准版,这里是直接输入序列号 ...
- Unity3D学习笔记(十七):IK动画、粒子系统和塔防
新动画系统: 反向动力学动画(IK功能): 魔兽世界(头部动画),神秘海域(手部动画),人类一败涂地(手部动画) 如何启用(调整) 1.必须是新动画系统Animator 设置头.手.肘的目标点 2.动 ...
- POJ 2965 The Pilots Brothers' refrigerator (枚举+BFS+位压缩运算)
http://poj.org/problem?id=2965 题意: 一个4*4的矩形,有'+'和'-'两种符号,每次可以转换一个坐标的符号,同时该列和该行上的其他符号也要随之改变.最少需要几次才能全 ...
- 【Django】【六】接口自动化测试框架
我的源码地址:https://github.com/woshixiaoyu202017/djangoTest 详细构建步骤如下 1. 生成新的测试数据库的数据库表结构guest_test 2. 数据库 ...
- Enumerable扩展方法
主要记录一些平时在工作中用到操作Enumerable的常用方法 /// <summary> /// The i enumerable extension. /// </summary ...
- Phpstorm配置scss不生成缓存
--no-cache 加上这个,就不会生成 .sass-cache 文件夹了.
- python导包显示No module named XXX问题
最近用sublime text写python脚本,在导包是一直显示No module named XXX. 问题描述: 首先文件夹的目录结构如下: count.py文件,代码如下: #coding=u ...