1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
template<typename T>
void Swap(T& a,T& b){T t=a;a=b;b=t;}
template<typename T>
void shift(T* ary,int k,int f,bool comp(const T& a,const T&b) )
{
for(int son=k*2;son<=f;k=son,son=k*2)
{
if(son+1<=f&&comp(ary[son+1],ary[son]))
++son;
if(comp(ary[son],ary[k]))
Swap(ary[son],ary[k]);
else break;
}
}
template<typename T>
void heapSort(T* ary,int l,int r,bool comp(const T& a,const T&b))//r不是超尾而是最后一个元素
{
int mid=(l+r)/2;
for(int i=mid;i>=l;--i)
shift(ary,i,r,comp);
for(int i=r;i>=l+1;--i)
{
Swap(ary[i],ary[l]);
shift(ary,l,i-1,comp);
}
}
|