实例:
#include <iostream>
#include <utility>
using namespace std;
void shiftdown(int *a, int i, int n)
{
int j, temp;
temp = a[i];
j = 2 * i + 1;
while (j < n)
{
if (j + 1 < n && a[j + 1] < a[j]) //在左右孩子中找最小的
j++;
if (a[j] >= temp)
break;
a[i] = a[j]; //把较小的子结点往上移动,替换它的父结点
i = j;
j = 2 * i + 1;
}
a[i] = temp;
}
void create(int *a, int n)
{
int i = 0;
for(i = n/2; i>= 0; --i)
{
shiftdown(a, i, n);
}
cout << "the min heap :"<<endl;
for(i=0; i<n;++i)
{
cout << a[i] <<" ";
}
cout << endl;
}
void sortheap(int *a, int n)
{
for(int i = n-1;i>=1;--i)
{
swap(a[0],a[i]);
shiftdown(a, 0, i);
}
}
int main(int argc, char *argv[])
{
int n = 0;
cin >> n;
if(n <=0 )return -1;
int a[n];
for(int i=0;i<n;++i)
{
cin>>a[i];
}
create(a, n);
sortheap(a, n);
for(int i=0;i<n;++i)
{
cout << a[i]<< " ";
}
return 0;
}