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

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

 

#include 
using namespace std;#define left(i) (i * 2)#define right(i) (i * 2 + 1)int n, num[100 + 2]; void swap(int &a, int &b) { int c = a; a = b, b = c; } void Max_heap(int num[], int i, int m) { int l = left(i), r = right(i), largest = i; if(l <= m && num[largest] < num[l]) largest = l; if(r <= m && num[largest] < num[r]) largest = r; if(largest != i) { swap(num[largest], num[i]); Max_heap(num, largest, m); } } int main() { cin >> n ; for(int i = 1; i <= n; i++) cin >> num[i]; for(int i = n / 2; i >= 1; i--) Max_heap(num, i, n); for(int i = n; i >= 2; i--) { swap(num[1], num[i]); Max_heap(num, 1, i - 1); } for(int i = 1; i <= n; i++) cout << num[i] << " "; cout << endl; return 0; } //时间复杂度:O(nlgn)

通过维护一个大根堆/小根堆来实现数组元素的排序,优点是维护步骤容易理解,其涉及的一些细节操作会对线段树的书写多少有写辅助。

此代码的缺陷:swap函数并不用手写,节点编号用i << 1、i << 1 | 1 来计算可多少加快一点运算速度。

转载于:https://www.cnblogs.com/QQ-1615160629/p/5852152.html

你可能感兴趣的文章
Word 2007 目录生成技巧
查看>>
linux网络协议栈--路由流程分析
查看>>
weblogic.jms.common.MessageFormatException: JMSClientExceptions: Invalid property name
查看>>
python3使用urlllib爬虫1
查看>>
值得收藏的十二条Jquery随身笔记
查看>>
当DiscuzNT遇上了Loadrunner(下)(转)
查看>>
mysql学习之join用法
查看>>
UIScrollView+UIPageControl 图片切换加分页标示
查看>>
【未有之有】洛依文明相关
查看>>
源代码安装GIT
查看>>
电脑上报缺失msvcr100d.dll 处理(转)
查看>>
Java 开发中的对象拷贝
查看>>
创建型模式的特点和分类
查看>>
Python学习笔记——基础篇【第五周】——常用模块学习
查看>>
CentOS7.3编译安装Nginx设置开机启动
查看>>
个数是如何用大数据做行为预测的?
查看>>
孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6
查看>>
Linux基础命令---chown
查看>>
一种解决h5页面背景音乐不能自动播放的方案
查看>>
R语言统计字符串的字符数ncahr函数
查看>>