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

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

hot3.png

Go 描述:

// siftDown implements the heap property on data[lo, hi).// first is an offset into the array where the root of the heap lies.func siftDown(data sort.Interface, lo, hi, first int) {	root := lo	for {		child := 2*root + 1		if child >= hi {			break		}		if child+1 < hi && data.Less(first+child, first+child+1) {			child++		}		if !data.Less(first+root, first+child) {			return		}		data.Swap(first+root, first+child)		root = child	}}// 堆排序// 将 data 的 [a, b) 范围进行排序func heapSort(data sort.Interface, a, b int) {	first := a	lo := 0	hi := b - a	// Build heap with greatest element at top.	for i := (hi - 1) / 2; i >= 0; i-- {		siftDown(data, i, hi, first)	}	// Pop elements, largest first, into end of data.	for i := hi - 1; i >= 0; i-- {		data.Swap(first, first+i)		siftDown(data, lo, i, first)	}}

C++ 描述:

#include 
// siftDown implements the heap property on data[lo, hi).// first is an offset into the array where the root of the heap lies.template
void siftDown(T data[], int lo, int hi, int first){ auto root = lo; for (; true;) { auto child = 2 * root + 1; if (child >= hi) { break; } if (child + 1 < hi && data[first + child] < data[first + child + 1]) { ++child; } if (!(data[first + root] < data[first + child])) { return; } std::swap(data[first + root], data[first + child]); root = child; }}// 堆排序// 将 data 的 [a, b) 范围进行排序template
void HeapSort(T data[], int a, int b){ auto first = a; auto lo = 0; auto hi = b - a; // Build heap with greatest element at top. for (auto i = (hi - 1) / 2; i >= 0; --i) { siftDown(data, i, hi, first); } // Pop elements, largest first, into end of data. for (auto i = hi - 1; i >= 0; --i) { std::swap(data[first], data[first + i]); siftDown(data, lo, i, first); }}

Python 描述:

转载于:https://my.oschina.net/jthmath/blog/817517

你可能感兴趣的文章
绿盟科技互联网安全威胁周报2016.34 本周关注ntp拒绝服务漏洞
查看>>
跨越传统SIEM 解析瀚思的大数据安全思维
查看>>
2017年SSD将超存储市场33%份额
查看>>
再说智能手环:我为何会坚持佩戴半年?
查看>>
关于ASP.NET内存缓存你需要知道的10点
查看>>
Windows服务器重启导致filebeat无法启动
查看>>
为IoT和大数据项目分配IT资源
查看>>
GNU KHATA:开源的会计管理软件
查看>>
MIT做了一个全自动的大数据分析系统
查看>>
软件定义架构能为我做什么?
查看>>
未来的物联网 必须具备的三样东西是什么?
查看>>
如何避免数据库勒索事件及从删库到跑路的尴尬(阿里云数据库峰会PPT)
查看>>
想在网络安全领域深耕发展 需要具备这几种学位
查看>>
CoreOS,一款Linux容器发行版
查看>>
数据库服务器是什么 处理大数据的钥匙
查看>>
第三季度斩获重要投资的15家网络安全公司
查看>>
雅虎“卖身”之后:梅耶尔的角色会如何转换?
查看>>
在Vista安装SQL 2008 Express遭遇属性不匹配错误解决办法
查看>>
VMware宣布与华云数据签署合作备忘录
查看>>
Human-like learning在对话机器人中的魔性运用
查看>>