Cod sursa(job #2288636)
| Utilizator | Data | 23 noiembrie 2018 18:31:19 | |
|---|---|---|---|
| Problema | Sortare prin comparare | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.72 kb |
#include<fstream>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int n,a[500005];
void downheap(int k,int n){
int nod;
do{
nod=0;
if(2*k<=n){
nod=2*k;
if(2*k+1<=n && a[2*k+1]>a[2*k])
nod=2*k+1;
if(a[k]>a[nod])
nod=0;
}
if(nod){
swap(a[k],a[nod]);
k=nod;
}
}while(nod);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=n/2;i>=1;i--)
downheap(i,n);
for(int i=n;i>=2;i--){
swap(a[1],a[i]);
downheap(1,i-1);
}
for(int i=1;i<=n;i++)
cout<<a[i]<<' ';
}
