template<class T>
void shift_up(T A[],int position)
{
if(position!=1)
while(position!=1)
{
if(A[position/2]<A[position])
swap(A[position/2],A[position]);
else
break;
position/=2;
}
}
template<class T>
void shift_down(T A[],int position,int n)
{
if(position*2<=n)
while((position=position*2)<=n)
{
if((position+1<=n)&&(A[position+1]>A[position]))
position+=1;
if(A[position/2]<A[position])
swap(A[position/2],A[position]);
else
break;
}
}
template<class T>
void Insert(T A[],T x,int& n)
{
n+=1;
A[n]=x;
shift_up(A,n);
}
template<class T>
void delete(T A[],int& n,int position)
{
T x,y;
x=A[n];
n-=1;
if (position<n)
{
y=A[position];
if(x<y)
shift_down(A,position,n);
else
shift_up(A,position);
}
}
template<class T>
T deleteMax(T A[],int& n)
{
T x=A[1];
delete(A,n-1,1);
return x;
}
template<class T>
void makeHeap(T A[],T H[],int n)
{
for (int i=0,m=0;i!=n;i++)
Insert(A,m,H[i]);
}
template<class T>
void makeHeap_1(T A[],int n)
{
A[n]=A[0];
for (int i=n/2;i>=1;i--)
shift_down(A,i,n);
}
堆排序
最新推荐文章于 2020-10-06 11:23:37 发布