堆排序
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int a[100]; int n,m; void sdown(int i){ if(i==n) return ; int flag=0; while(i*2<=n&&!flag){ //cout<<i<<" "<<a[i]<<endl; if(a[i*2]<a[i*2+1]||i*2+1>n){ if(a[i*2]<a[i]){ swap(a[i*2],a[i]); i*=2; }else{ flag=1; } }else{ if(a[i*2+1]<a[i]){ swap(a[i*2+1],a[i]); i=i*2+1; }else{ flag=1; } } } return ; } void buil(){ for(int i=n/2;i>=1;i--){ sdown(i); } } void ssort(){ while(n!=0){ cout<<a[1]<<endl; a[1]=a[n]; n--; sdown(1); } } int main() { while(cin>>n){ for(int i=1;i<=n;i++){ cin>>a[i]; } buil(); ssort(); } return 0; }