#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
#include <stack>
#include <set>
#include <ctype.h>//isalpha,isdight,toupper
#include <map>
#include <sstream>
typedef long long ll;
using namespace std;
#define inf 0x3f3f3f3f
const int maxn=101;
int h[maxn],n;
void swap1(int x,int y){
int t;
t=h[x];
h[x]=h[y];
h[y]=t;
return ;
}
void siftdown(int i){
int t,flag=0;
while(i*2<=n&&flag==0){
if(h[i]>h[i*2])
t=i*2;
else t=i;
if(i*2+1<=n){
if(h[t]>h[i*2+1])
t=2*i+1;
}
if(t!=i){
swap1(t,i);
i=t;
}
else
flag=1;
}
return ;
}
void creat(){
int i;
for(i=n/2;i>=1;i--){
siftdown(i);
}
return ;
}
int deletemax(){
int t;
t=h[1];
h[1]=h[n];
n--;
siftdown(1);
return t;
}
int main(){
int i,num;
scanf("%d",&num);
for(i=1;i<=num;i++){
scanf("%d",&h[i]);
}
n=num;
creat();
for(i=1;i<=num;i++){
printf("%d ",deletemax());
}
return 0;
}
建立堆以及堆排序
猜你喜欢
转载自blog.csdn.net/abc1235454/article/details/88927069
今日推荐
周排行