#include<iostream>
using namespace std;
void Insert(int *arr, int len)
{
for(int i=0;i<len-1;++i)
{
if(arr[i+1]<arr[i])
{
int k=i;
int tep = arr[i+1];
while(arr[k]>tep && k>=0)
{
arr[k+1] = arr[k];
k--;
}
arr[k+1] =tep;
}
}
}
void show(int *arr, int len)
{
for(int i=0;i<len;++i)
{
cout<<arr[i]<<' ';
}
cout<<endl;
}
void Shell(int *arr , int len, int d)
{
for(int i=d;i<len;i++)
{
if(arr[i]<arr[i-d])
{
int tep= arr[i];
arr[i] = arr[i-d];
arr[i-d] = tep;
}
}
}
void Pop(int *arr , int len)
{
if(arr==NULL)
{
return ;
}
for(int j=1;j<len;j++)
{
int flg=0;
for(int i=0;i<len-1;++i)
{
if(arr[i]>arr[i+1])
{
int tep = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tep;
flg=1;
}
}
if(flg==0)
{
break;
}
}
}
void Doupop(int *arr , int len)
{
if(arr == NULL)
{
return;
}
int swap=1;
for(int i=1; swap!=0; ++i)
{
swap=0;
for(int j=i;j<len;++j)
{
if(arr[j-1]>arr[j])
{
int tep = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tep;
swap=1;
}
}
for(int j=len-i; j>=0; j--)
{
if(arr[j]<arr[j-1])
{
int tep = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tep;
}
}
}
}
int Partion(int *arr , int beg, int end)
{
int tep = arr[beg];
while(beg<end)
{
while(beg<end && arr[end]>=tep)
{
end--;
}
if(beg<end)
{
arr[beg] = arr[end];
beg++;
}
while(beg<end&& arr[beg]<=tep)
{
beg++;
}
if(beg<end)
{
arr[end] = arr[beg];
end--;
}
}
arr[beg] = tep;
return beg;
}
void QuitSort(int *arr , int beg, int end)
{
if(arr==NULL)
{
return ;
}
int i;
if(beg<end)
{
i = Partion(arr , beg, end);
QuitSort(arr , beg , i-1);
QuitSort(arr , i+1,end);
}
}
void SelectSort(int *arr , int n)
{
int min;
int k;
for(int i=0;i<n-1;++i)
{
min = arr[i];
for(int j=i+1;j<n;++j)
{
if(arr[j]<min)
{
min = arr[j];
k=j;
}
}
if(k!=i)
{
int tep = arr[i];
arr[i] = arr[k];
arr[k] = tep;
}
}
}
void HeapAdjust(int *a,int i,int size)
{
int lchild=2*i;
int rchild=2*i+1;
int max=i;
if(i<=size/2)
{
if(lchild<=size&&a[lchild]>a[max])
{
max=lchild;
}
if(rchild<=size && a[rchild]>a[max])
{
max=rchild;
}
if(max!=i )
{
swap(a[i],a[max]);
if(max<size/2)
{
HeapAdjust(a,max,size);
}
}
}
}
void BuildHeap(int *a,int size)
{
int i;
for(i=size/2;i>0;i--)
{
HeapAdjust(a,i,size);
}
}
void HeapSort(int *a,int size)
{
int i;
BuildHeap(a,size);
for(i=size;i>=1;i--)
{
swap(a[1],a[i]);
HeapAdjust(a,1,i-1);
}
}
int main()
{
int arr[] = {-1,9,8,7,6,5,4,3,2,1,0};
int len = sizeof(arr)/sizeof(arr[0]);
HeapSort(arr , len-1);
show(arr, len);
return 0;
}