在优先队列中我们会看到最大堆。
最大堆的原理是:除了根结点外的所有结点都要满足,小于父结点。
构建最大堆的过程如下:
#include <iostream>
#include <cmath>
#define mx 50
using namespace std;
int a[mx] ;
int n ;
void adjust(int i)
{
int child ;
while(i <= n / 2)
{
child = 2 * i ;
if(child + 1 <= n && a[child] < a[child + 1])
child ++ ;
if(a[i] < a[child])
swap(a[i] , a[child]) ;
else
return ;
i = child ;
}
}
int main()
{
while(cin >>n)
{
for(int i = 1; i <= n; i ++)
cin >> a[i] ;
for(int i = 1; i <= n; i ++)
cout << a[i] << " ";
cout << endl;
for(int i = n / 2; i >= 1; i --)
adjust(i) ;
cout <<"----" << endl ;
for(int i = 1; i <=n ; i ++)
cout << a[i] << " ";
cout << endl;
}
return 0 ;
}