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

基于完全二叉树的极大堆的上下漂移实现

时间:2015-07-23 19:51:43      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:

 1 //基于完全二叉树的极大堆的上下漂移实现 
 2 //INT_MAX极大数 INT_MIN极小数 
 3 #include <cstdlib>
 4 #include <iostream>
 5 #include <vector> 
 6 #define N 11
 7 
 8 using namespace std;
 9 
10 typedef int  T;     //!!!!!!!
11 typedef vector<T>::iterator TP;//!!!!!
12 
13 void shiftup(TP a,int n){
14      for(int p=n/2;p>0&&(a[p]<a[n]);p=(n=p)/2)//向量可以这样索引 
15       std::swap(a[p],a[n]); 
16 } 
17      
18      
19 void shiftdown(TP a,int n){
20      for(int p=1,bc=2;bc<=n;bc=2*p){
21        if(bc<n&&(a[bc]<a[bc+1])) ++bc;
22        if(a[p]<a[bc]) {std::swap(a[bc],a[p]);p=bc;}
23        else break;      
24              }
25      }
26  
27  
28  
29  
30  int main(){  
31  vector<int> vv;
32  vv.reserve(2*N);
33 vv.push_back(INT_MAX); //INT_MAX极大数 INT_MIN极小数 
34  //vv[0]=INT_MAX;//!!! 
35  //cout<<vv[0]<<endl;
36  //system("PAUSE");
37 //    return 1;
38  //for(int i=1;i<21;i++)
39  vv.push_back(88);
40  vv.push_back(75);
41  vv.push_back(83);
42  vv.push_back(65);
43  vv.push_back(55);
44  vv.push_back(63);
45  vv.push_back(53);
46  vv.push_back(45);
47  vv.push_back(35);
48  //vv[2]=14;//用地址+【】进行索引 
49  TP first=vv.begin();
50  //!!!定义向量的指针用该语句,而非用取地址符号来定义 
51 //cout<<vv[0]<<endl;  
52 for(int i=0;i<N-1;i++)
53    cout<<vv[i]<<endl;
54  
55  int o=91;
56 //极大堆的shiftup操作实现 
57 cout<<"now add value to MAX_HEAP:"<<o<<endl;
58 vv.push_back(o);
59 shiftup(first,N-1);
60 cout<<"after shiftup operation:"<<endl; 
61 for(int i=0;i<N;i++)
62    cout<<vv[i]<<endl;
63    
64 std::swap(vv[N-1],vv[1]);
65 shiftdown(first,N-1);   
66 cout<<"after shiftdown operation:"<<endl;
67    for(int i=0;i<N;i++)
68    cout<<vv[i]<<endl;
69    
70     system("PAUSE");
71     return 1;
72 }
73 
74  

 

基于完全二叉树的极大堆的上下漂移实现

标签:

原文地址:http://www.cnblogs.com/jieforever/p/4671252.html

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