#include <iostream>
using namespace std;
void Swap(int &a, int &b)
{
a ^= b;
b ^= a;
a ^= b;
}
void MinHeap(int *a, int i,int n)
{
int j, temp;
j = 2 * i + 1;
temp = a[i];
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 MakeMinHeap(int *a, int n)
{
for (int i = n / 2 - 1; i >= 0;i--)
{
MinHeap(a, i, n);
}
}
int main(int argc, char *argv[])
{
int a[10] = {5,3,4,8,6,1,2,9,7,10};
MakeMinHeap(a, 10);
for (int i = 9; i >= 0;i--)
{
cout << a[0] << " ";
Swap(a[i], a[0]);
MinHeap(a,0,i);
}
cout << endl;
system("pause");
return 0;
}