Pagini recente » Istoria paginii runda/eusebiu_oji_2006_cls9/clasament | Cod sursa (job #1090685) | Istoria paginii runda/testere/clasament | Cod sursa (job #1096426) | Cod sursa (job #340454)
Cod sursa(job #340454)
#include <iostream>
#include <fstream>
#define MAX 500002
using namespace std;
long v[MAX],x,n,i,q,nn;
void swapp(long &a,long &b){
long xx;
xx=a;
a=b;
b=xx;
}
void up(long i){
while(v[i]>v[i/2] && i>1){
swapp(v[i],v[i/2]);
i=i/2;
}
}
void down(long i){
long k;
short int ok=0;
while (i<=n){
if (i*2<=n && v[i]<v[i*2]){
k=i*2;
ok=1;
}
if (i*2+1<=n && v[i*2]<v[i*2+1] && v[i]<v[i*2+1]){
k=i*2+1;
ok=1;
}
if (ok){
swapp(v[k],v[i]);
i=k;
ok=0;
}
else{
return;
}
}
}
void buildheap(){
for (i=n/2; i>0; i--){
down(i);
}
}
int main(){
ifstream fin("algsort.in");
ofstream fout("algsort.out");
fin >> n;
nn=n;
for (q=1; q<=n; q++){
fin >> v[q];
}
buildheap();
while(n>1){
x=v[1];
v[1]=v[n];
down(1);
v[n]=x;
n--;
}
for (q=1; q<=nn; q++){
fout << v[q] << " ";
}
return 0;
}