最小堆要满足除了根结点外,所有的结点都大于父结点。(根结点最小)
实现最小堆的代码:
#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 ; }