转--Go语言用堆排序的方法进行一千万个int随机数排序
时间:2022-05-04
本文章向大家介绍转--Go语言用堆排序的方法进行一千万个int随机数排序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
上篇文章用的是quicksort方法排序,但是如果用快速排序法对重复率很高的slice排序的时候,时间复杂度会激增,速度相当慢
所以尝试了一下堆排序,实验结果,感觉挺好的.下面是代码,大家可以参考一下,这个是建立的大顶堆.
二叉树的特性:
最后一个非叶子节点 : root = length/2(当length为奇数的时候root向下取整) 在GO语言中的索引位置:root - 1,
左右孩子节点:child_l = 2*root,索引位置:child_l-1,右孩子的节点: 2*root+1 索引位置.
package main
import (
"fmt"
"math/rand"
)
func main() {
Num := 10000000
var list []int
for i := Num; i > 0; i-- {
list = append(list, rand.Intn(10000))
} //生成一千万个0---10000的随机数.
length := len(list)
for root := length/2 - 1; root >= 0; root-- {
sort(list, root, length)
} //第一次建立大顶堆
for i := length - 1; i >= 1; i-- {
list[0], list[i] = list[i], list[0]
sort(list, 0, i)
} //调整位置并建并从第一个root开始建堆.如果不明白为什么,大家多把图画几遍就应该明朗了
fmt.Println(list)
}
func sort(list []int, root, length int) {
for {
child := 2*root + 1
if child >= length {
break
}
if child+1 < length && list[child] < list[child+1] {
child++ //这里重点讲一下,就是调整堆的时候,以左右孩子为节点的堆可能也需要调整
}
if list[root] > list[child] {
return
}
list[root], list[child] = list[child], list[root]
root = child
}
}
- nohup命令
- 跨浏览器的剪贴板访问解决方案
- 装逼必备:大型分布式网站术语分析
- 年前爆炸一波!小程序视频功能来了!
- ubuntu13.04环境hadoop1.2.1单机模式安装
- silverlight:telerik RadControls中RadGridView的一个Bug及解决办法
- scope引起的问题
- JS正则表达式常用函数汇总
- 修改(同步)linux时间
- “爬虫”程序吃掉低价机票 高科技“黄牛”怎么破?
- javascript:json数据的页面绑定
- “刷脸”就可购物 全国首家人脸智慧时尚店亮相深圳
- testng-result中文乱码问题
- mac下环境变量、maven3.1.1 及 jdk1.7.0.45配置
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python第三十四课——2.匿名函数配合容器函数的使用
- 专家专栏|使用agent2自定义插件采集通过MQTT协议发送的数据
- Linux系统双网卡绑定配置教程
- python第三十五课——生成器
- python第三十六课——1.可迭代对象
- Linux系统Shell编程——脚本编写思路与过程
- python第三十六课——2.迭代器对象
- python第三十七课——模块
- Linux系统MySQL数据库主从同步实战过程
- 最火的java8新特性:Lambda 表达式
- python第三十九课——面向对象(二)之设计类
- python第三十九课——面向对象(二)之初始化属性
- LVS服务DR模式安装布署过程
- python第四十课——构造函数
- python第四十一课——析构函数