码迷,mamicode.com
首页 > 其他好文 > 详细

二叉堆练习3

时间:2016-12-31 22:47:01      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:wrap   lan   ddl   div   cst   script   等级   dev   时间   

题目描述 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

标签:wrap   lan   ddl   div   cst   script   等级   dev   时间   

原文地址:http://www.cnblogs.com/J-william/p/6238877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!