template<class Object>
void heapSort(vector<Object> &a){
for(int i=a.size()/2-1; i>=0; --i){
perDown(a, i, a.size());
}
for(int j=a.size()-1; j>0; --j){
std::swap(a[0],a[j]);
perDown(a, 0, j);
}
}
inline int leftChild(int i){
return 2*i+1;
}
template<class Object>
void perDown(vector<Object> &a, int i, int n){
int child;
Object tmp=std::move(a[i]);
for(; leftChild(i)<n; i=child){
child=leftChild(i);
if(child!=n-1 && a[child]<a[child+1]){
++child;
}
if(tmp<a[child]){
a[i]=std::move(a[child]);
}
else{
break;
}
}
a[i]=std::move(tmp);
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布