C++用模板函数实现堆排序
代码
#include<iostream>
#include<set>
#include<map>
#include<algorithm>
using namespace std;
template<typename T>
void adjustHeap(T *k,T i,T n) {
int temp=k[i];
int j=i*2;
while(j<=n) {
if(j<n&&k[j]<k[j+1]) {
j++;
}
if(temp>k[j]) {
break;
}
k[j/2]=k[j];
j=j*2;
}
k[j/2]=temp;
}
int main() {
int N;
cin>>N;
int a[N];
for(int i=1;i<=N;i++) {
cin>>a[i];
}
for(int i=N/2;i>0;i--) {
adjustHeap(a,i,N);
}
int temp;
for(int i=N;i>0;i--) {
temp=a[i];
a[i]=a[1];
a[1]=temp;
adjustHeap(a,1,i-1);
}
cout<<' ';
for(int i=1;i<=N;i++) {
cout<<a[i]<<' ';
}
return 0;
}