#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1005;
int a[maxn];
int len;
void HeadAdjust(int a[],int k,int len){
a[0]=a[k];
for(int i=2*k;i<=len;i*=2){
if(i<len&&a[i]<a[i+1])
i++;
if(a[i]<=a[0])
break;
else{
a[k]=a[i];
k=i;
}
}
a[k]=a[0];
}
void BuildHeap(int a[],int len){
for(int i=len/2;i>=1;i--){
HeadAdjust(a,i,len);
}
}
void HeapSort(int a[],int len){
BuildHeap(a,len);
for(int i=len;i>1;i--){
swap(a[i],a[1]);
HeadAdjust(a,1,i-1);
}
}
int main(){
cin>>len;
for(int i=1;i<=len;i++){
cin>>a[i];
}
HeapSort(a,len);
for(int i=1;i<=len;i++){
if(i!=1)
cout<<" ";
cout<<a[i];
}
cout<<endl;
return 0;
}
堆排序(通俗易懂版)
最新推荐文章于 2024-07-12 10:45:15 发布