#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void mySwap(int& a,int & b)
{
int temp=a;
a=b;
b=temp;
}
//对二叉树其中为i的进行向下大堆排序,使i的值切换到适当的位置。(把i当做以其为根的子树)
void HeapAdjust(vector<int > &vec,int i,int leght)
{
int myChild;
while (2*i+1<leght-1)
{
myChild=2*i+1;
if (myChild+1<leght-1)
{
if (vec[myChild]<vec[myChild+1])
{
++myChild;
}
}
if (vec[i]<vec[myChild])
{
mySwap(vec[i],vec[myChild]);
}
else
{
break;
}
i=myChild;
}
}
void HeapSort(vector<int >& vec,int leght)
{
for (int i=leght/2-1;i>=0;--i)
//调整前半部分使根为最大值
{
HeapAdjust(vec,i,leght);
}
for (int i=leght-1;i>0;--i)
{
mySwap(vec[0],vec[i]);
HeapAdjust(vec,0,i);
}
}
int main()
{
int arr[]={3,5,2,1,7,4,};
vector<int > vec(arr,arr+6);
for (int i=0;i<vec.size();++i)
{
cout<<arr[i]<<" ";
}
cout<<endl;
HeapSort(vec,vec.size());
for (int i=0;i<vec.size();++i)
{
cout<<vec[i]<<" ";
//输出的结果是1,2,3,4,5,7 从小到大输出。因为最大的7被放置到vec[5],依次最大的放置到最低端导致。
}
cout<<endl;
return 0;
}