Pagini recente » Cod sursa (job #2815623) | Cod sursa (job #2255224) | Cod sursa (job #681877) | Cod sursa (job #312237) | Cod sursa (job #617113)
Cod sursa(job #617113)
/*
* algsort.cpp
*
* Created on: Oct 13, 2011
* Author: ruxy
*/
#include<fstream>
#include<cmath>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
unsigned long long v[100],h=1;
int father (unsigned long long k, unsigned long long n)
{ if(k>1) return 1;
else return 0;
}
unsigned long long lson(unsigned long long k, unsigned long long n)
{ unsigned long long a=2*k;
if(a<=n) return 1;
else return 0;
}
unsigned long long rson(unsigned long long k, unsigned long long n)
{ unsigned long long a=2*k+1;
if(a<=n) return 1;
else return 0;
}
void sift (unsigned long long k, unsigned long long n)
{ unsigned long long 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(unsigned long long h,unsigned long long n)
{ unsigned long long i,lim;
lim=n/2;
while(lim)
{ sift(lim,n); lim--; }
}
unsigned long long inaltime(unsigned long long n)
{ unsigned long long i=0;
while(h<n) { h*=2; i++;}
return i;
}
void sortare(unsigned long long n)
{ unsigned long long 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;
}