jzoj1478-堆排序【堆】
2018-02-01 07:41
162 查看
题目
一些数,用堆把它们从小到大排好解题思路
每个堆的开头是最大(小)的。每次把开头读取出来,然后把a[num]提取上来,然后num减1在把新的a[1]降到合适的位置。代码
#include<cstdio> using namespace std; int a[200001],num,x,n; long long s,u; void up(int x)//调整位置之1 { int t; while (x>1 && a[x]<a[x/2]) { t=a[x];a[x]=a[x/2];a[x/2]=t; x/=2; } } void down(int x)//调整位置之2 { int t,y; while (x*2<=num && a[x]>a[x*2] || x*2+1<=num && a[x]>a[x*2+1]) { y=x*2; if (x*2+1<=num && a[x*2]>a[x*2+1]) y++; t=a[x];a[x]=a[y];a[y]=t; x=y; } } void insert(int x)//插入 {a[++num]=x;up(num);} int main() { scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&x); insert(x); }//建堆 for (int i=1;i<=n;i++) { printf("%d\n",a[1]);a[1]=a[num];num--;down(1);//排序 } }
相关文章推荐
- JZOJ 1478 堆排序
- jzoj_1478 堆排序
- 堆排序
- jzoj_1月30日D组
- JZOJ 4692 传送带
- 公牛数学——jzoj 1896
- JZOJ 3051. 单元格
- JZOJ 3775. 【NOIP2014模拟8.15】因子的排列
- JZOJ 4294. 复制&粘贴2
- JZOJ 3815. 【NOIP2014模拟9.7】克卜勒
- Java排序算法--堆排序(HeapSort)
- 堆排序
- 【JZOJ 4771】爬山
- jzoj3819 [NOI2015模拟9.9]取石子
- JZOJ 4772. 运输妹子
- JZOJ3847. 【NOIP2014八校联考第1场第2试9.21】都市环游(travel)
- 堆排序java实现
- 洛谷 1073 JZOJ 2539 最优贸易
- 【JZOJ 4783】 Osu
- 数据结构:堆排序