a_beginner

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

手写堆

 1 int size = 0;//堆的大小
 2 int heap[maxn];
 3 void push( int x )
 4 {
 5     int i = size;
 6     while( i > 0 )
 7     {
 8         int p = (i - 1)/2;
 9         if( heap[p] <=x )
10             break;
11 
12         heap[i] = heap[p];
13         i = p;
14     }
15     heap[i] = x;
16     size ++;
17 }
18 
19 int pop( )
20 {
21     int ret = heap[0];
22     int x = heap[--size];
23     int i = 0;
24     while( (2*i + 1) < size )
25     {
26         int a = 2*i + 1;
27         int b = 2*i + 2;
28         if( b<size && heap[b] < heap[a] )
29             a = b;
30         if(heap[a] > x)
31             break;
32         heap[i] = heap[a];
33         i = a;
34     }
35     heap[i] = x;
36     return ret;
37 }

 

posted on 2013-08-05 15:50  a_beginner  阅读(111)  评论(0)    收藏  举报