#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
void insert_sort(int a[],int n){
int h,i,j,temp;
for(h=n/2; h>0; h/=2) {
for (i = h; i < n; i+=h) {
temp = a[i];
for (j = i - h; a[j] > a[j + h] && j >= 0; j-=h)
swap(a[j], a[j + h]);
a[j+h]=temp;
}
}
}
void bubble_sort(int a[],int len){
int i= 0, j = 0 , exchange = 0 ;
for(i=1 ; i < len ; i++){
for(j = 0 ; j < len-i ; ++j )
{
if(a[j+1] < a[j]){
swap(a[j],a[j+1]);
exchange=1;
}
}
if( exchange != 1 ) return;
}
}
void quick_sort(int a[],int low,int high){
int i,j,pivot;
if(low < high)
{
pivot = a[low];
i=low , j = high;
while( i < j ){
while(i<j && a[j]>=pivot) j--;
if(i<j) a[i++]=a[j];
while(i<j && a[i]<= pivot) i++;
if(i < j) a[j--] = a[i];
}
a[i]=pivot;
quick_sort(a,low,i-1);
quick_sort(a,i+1,high);
}
}
void select_sort(int a[], int len) {
int i, j, min, temp;
for(i=0; i < len-1 ; ++i)
{
min = i;
for(j=i+1; j < len; ++j)
if(a[min] > a[j])
min=j;
swap(a[min],a[i]);
}
}
int heapSize= 0;
int Left(int index){ return ( (index<<1)+1 ); }
int Right(int index){ return ((index << 1)+2) ; }
void max_heapify(int arr[], int start, int end) {
int dad = start;
int son = dad * 2 + 1;
while (son <= end) {
if (son + 1 <= end && arr[son] < arr[son + 1])
son++;
if (arr[dad] > arr[son])
return;
else {
swap(arr[dad], arr[son]);
dad = son;
son = dad * 2 + 1;
}
}
}
void heap_sort(int arr[], int len) {
for (int i = len / 2 - 1; i >= 0; i--)
max_heapify(arr, i, len - 1);
for (int i = len - 1; i > 0; i--) {
swap(arr[0], arr[i]);
max_heapify(arr, 0, i - 1);
}
}
int main(int argc ,char** argv)
{
int a[]={
7,30,5,2,51,4,6};
heap_sort(a,7);
for (int i = 0; i < 7 ; ++i) {
cout<<a[i]<<" "<<endl;
}
cout<<2500<<endl;
return 0;
}