堆排序【模板】
来源:互联网 发布:python 日记本 编辑:程序博客网 时间:2024/05/16 15:43
重点 堆的维护
拍桌!记得把循环的i从1开始!!!
(此处针对小根堆)每次将堆顶提出,即为当前最小值,再讲堆尾放到堆首,之后与左右节点比对,与其中较小的交换,直到重新成为小根堆。
附上父亲或儿子节点的计算方法:
用一个一维数组就可以装下一个完全二叉树,a[n]
的父亲为a[n/2]
,儿子是a[n*2],a[n*2+1]
。
#include<iostream> #include<cstdio> using namespace std; int n,x; int hp[20000],t,a[20000]; void push(int x) { t++; int now=t; hp[now]=x; while(now>1) { if(hp[now]<hp[now/2]) { int ls=hp[now]; hp[now]=hp[now/2]; hp[now/2]=ls; now=now/2; } else break; } } int del() { int res=hp[1]; hp[1]=hp[t]; t--; int now=1; while(2*now<=t) { int tp=2*now; if(tp<t && hp[tp]>hp[tp+1]) tp++; if(hp[now]>hp[tp]) { int ls=hp[now]; hp[now]=hp[tp]; hp[tp]=ls; now=tp; } else break; } return res; } int main() { cin>>n; for(int i=0; i<n; i++) { cin>>x; push(x); } // for(int i=1; i<=n; i++) { // cout<<hp[i]<<endl; // } for(int i=0;i<n;i++){ a[i]=del(); } for(int i=0;i<n;i++){ cout<<a[i]<<" "; }}
阅读全文
0 0
- 【ACM模板】堆排序
- 堆排序模板
- C++堆排序模板
- 堆排序【模板】
- 堆排序模板
- 堆排序模板
- C++模板堆排序
- 【模板】堆排序
- 堆排序的模板
- 堆排序模板
- 堆排序【模板】
- 堆排序,C++模板编程
- 堆排序(Heap_Sort)模板
- 堆排序,C++模板编程
- C++模板之堆排序
- C++模板实现堆排序
- 算法--堆排序学习以及模板
- 堆排序(可以作为模板)
- Linux使用ifconfig 设置IP、掩码、网关
- 菜鸟进步历程(1)
- 11月30日考试反思
- 大数据WEB阶段(十九)Threadlocal
- mac os 操作GitHub 详细教程
- 堆排序【模板】
- 关于keil uvision的ARM与51的共存安装方法
- KNN算法例子(java,scala,python 代码实现)
- C语言单链表的创建、插入、查找、删除、求长、排序、遍历
- 记一次在Android studio配置多版本出现的坑爹错误
- 高性能队列——Disruptor
- VisualVM使用方法
- SpringBoot 1.X 优雅停机 ( shutdown gracefully )
- Appium-环境安装