Pagini recente » Cod sursa (job #2923706) | Cod sursa (job #3254698) | Cod sursa (job #539467) | Cod sursa (job #802697) | Cod sursa (job #617118)
Cod sursa(job #617118)
/*
* algsort.cpp
*
* Created on: Oct 13, 2011
* Author: ruxy
*/
#include<fstream>
#include<cmath>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
long int v[500020],h=1;
int father (long int k, long int n)
{ if(k>1) return 1;
else return 0;
}
long int lson(long int k, long int n)
{ long int a=2*k;
if(a<=n) return 1;
else return 0;
}
long int rson(long int k, long int n)
{ long int a=2*k+1;
if(a<=n) return 1;
else return 0;
}
void sift (long int k, long int n)
{ long int aux;
if(lson(k,n)&&rson(k,n))
if(v[k]<v[2*k]&&v[2*k]>=v[2*k+1]) { aux=v[k]; v[k]=v[2*k]; v[2*k]=aux; sift(2*k,n);}
else if(v[k]<v[2*k+1]&&v[2*k]<v[2*k+1]){ aux=v[k]; v[k]=v[2*k+1]; v[2*k+1]=aux; sift(2*k+1,n); }
if(lson(k,n)&&!rson(k,n)) if(v[k]<v[2*k]) { aux=v[k]; v[k]=v[2*k]; v[2*k]=aux;}
}
void heap(long int h,long int n)
{ long int i,lim;
lim=n/2;
while(lim)
{ sift(lim,n); lim--; }
}
long int inaltime(long int n)
{ long int i=0;
while(h<n) { h*=2; i++;}
return i;
}
void sortare(long int n)
{ long int aux,n2,i;
while(n>1)
{
aux=v[1];
v[1]=v[n];
v[n]=aux;
n--;
sift(1,n);
}
}
int main()
{ long i,n;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
heap(h,n);
sortare(n);
for(i=1;i<=n;i++)
g<<v[i]<<' ';
return 0;
}