Cod sursa(job #360219)

Utilizator ConsstantinTabacu Raul Consstantin Data 30 octombrie 2009 17:25:28
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<stdio.h>

int v[500200];
long int i,j,n,m;
void swap(int a,int b){
int aux;
aux=v[a],v[a]=v[b];v[b]=aux;
}

void upd(){
int k=i;
while(v[k]<v[k/2] && k>1){
swap(k,k/2);
k=k/2;}
}

void del(int m){
while(m<=n)
    if(v[2*m+1]<v[2*m] && v[2*m+1]<v[m] && (2*m+1)<=n){swap(m,2*m+1);m=2*m+1;}
    else
    if(v[2*m]<v[m] && 2*m<=n){swap(m,2*m);m=2*m;}
    else
        break;
	}



int main(){
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);


scanf("%d",&n);
for(i=1;i<=n;i++)
	{scanf("%d",&v[i]);
	upd();}
m=n;	
for(i=1;i<=m;i++){
	printf("%d ",v[1]);
	swap(1,n);
	n--;
	del(1);}


return 0;}