首页 > 代码库 > 二叉堆练习3
二叉堆练习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
代碼實現:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int n,a,b,c,dp,ado,rec; 5 int heap[600000];//數組要開的大一些。 6 void put(int x){ 7 ++dp; 8 heap[dp]=x; 9 rec=dp; 10 while(rec>1){ 11 if(heap[rec]<heap[rec/2]){ 12 swap(heap[rec],heap[rec/2]); 13 rec/=2; 14 } 15 else break; 16 } 17 } 18 int get(){ 19 int d=1,e; 20 rec=heap[d]; 21 heap[d]=heap[dp]; 22 dp--; 23 while(d*2<=dp){ 24 if(heap[d*2]>heap[d*2+1]) c=d*2+1; 25 else c=d*2; 26 if(heap[d]>heap[c]){ 27 swap(heap[d],heap[c]); 28 d=c; 29 } 30 else break; 31 } 32 return rec; 33 } 34 int main(){ 35 cin>>n; 36 for(int i=1;i<=n;i++){ 37 cin>>a; 38 put(a); 39 } 40 for(int i=1;i<=n;i++) printf("%d ",get()); 41 return 0; 42 }
一個堆排的裸題。
二叉堆练习3
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。