【codevs3110】一把鼻涕一把泪的堆排序
来源:互联网 发布:4g网络平板电脑 编辑:程序博客网 时间:2024/04/20 08:02
3110 二叉堆练习3
时间限制: 3 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题解
查看运行结果
题目描述 Description
给定N(N≤500,000)和N个整数(较有序),将其排序后输出。
输入描述 Input Description
N和N个整数
输出描述 Output Description
N个整数(升序)
样例输入 Sample Input
5
12 11 10 8 9
样例输出 Sample Output
8 9 10 11 12
数据范围及提示 Data Size & Hint
对于33%的数据 N≤10000
对于另外33%的数据 N≤100,000 0≤每个数≤1000
对于100%的数据 N≤500,000 0≤每个数≤2*10^9
写在前面:哭晕(:з」∠)
————————————————————————————————————————————————————————
写在前面:不想说啥了,一个星期没碰电脑,手都生了,想不起程序段回去看原来写的,后来写了半天发现并不适用,尽情地叫我脑残好了!(这道题是可以用快排做的←—←)
#include<cstdio>#include<iostream>using namespace std;int heap[500001],n,len,x;void fix(){ int l=len; while (l/2>=0) { int k=l/2; if (heap[l]>=heap[k]) break; else { swap(heap[l],heap[k]); l=k; } }}void get(){ int l=1; while (l*2<=len) { int k=l*2; if (heap[k]>heap[k+1]&&k+1<=len) k++; if (heap[l]<=heap[k]) break; else { swap(heap[l],heap[k]); l=k; } }}main(){ scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&x); len++; heap[len]=x; fix(); } for (int i=1;i<=n;i++) { get(); printf("%d ",heap[1]); heap[1]=heap[len]; len--; } }
0 0
- 【codevs3110】一把鼻涕一把泪的堆排序
- 长训终于完成了,深圳驾考,一把鼻涕一把泪
- .net入门一把辛酸一把泪
- xmu 1307一把心酸一把泪啊
- mac 安装memcache 一把辛酸一把泪
- 科大讯飞面试,一把泪。
- 一把钥匙一把锁
- 一把雨伞引发的思考
- 一把燃放鞭炮的瘾
- Meego一把
- 风骚一把
- 尝试一把
- 忏悔一把
- 一把锁
- 一把尺子
- 软件现场测试,一把锋利的双刃剑
- 测试了一把 XslTransform 的性能
- 面试失败:求职成功的一把“金钥匙”
- java 反射方式访问私有属性和方法
- 二叉树的非递归遍历
- poj 1961 Period(kmp)
- 网上商城之用户注册发送邮件激活
- Android网格布局的简单使用
- 【codevs3110】一把鼻涕一把泪的堆排序
- git 打标签操作
- 【零基础】CentOS 7 64位系统下编译Hadoop2.7.0
- c++友元
- SpringMVC+Hbernate+Spring简单使用
- hdu 1950 Bridging signals【LIS nlogn】
- 拼接数组
- ubuntu运行Faster R-CNN
- WindowManager$BadTokenException——token null is not for an application解决方法