Pagini recente » Cod sursa (job #2541181) | Clasamentul arhivei de probleme | Cod sursa (job #2736177) | Cod sursa (job #1960476) | Cod sursa (job #613572)
Cod sursa(job #613572)
#include <fstream.h>
ifstream f("algsort.in");
ofstream g("algsort.out");
int n,heap[500001];
void tipar(){
for(register int i=1;i<=n;i++)
g<<heap[i]<<" ";
}
int main(void){
register int i,j,q;
f>>n;
int u=0;
//I:construim heapul
for(i=1;i<=n;i++){
f>>q;
heap[++u]=q;
int c=u,p=c/2;
while(p>=1 && heap[c]>heap[p]){
register int aux=heap[c];
heap[c]=heap[p];
heap[p]=aux;
c=p;
p/=2;
}
}
f.close();
//II:sortarea pr-zisa
for(i=n;i>0;i--){
register int aux=heap[1];
heap[1]=heap[i],heap[i]=aux;
int p=1,c=2*p;
if(c+1<=i-1 && heap[c]<heap[c+1])
c++;
while(heap[p]<heap[c] && c<=i-1){
aux=heap[p],heap[p]=heap[c],heap[c]=aux;
p=c;
c*=2;
if(c+1<=i-1 && heap[c]<heap[c+1])
c++;
}
}
tipar();
return 0;
}