Pagini recente » Cod sursa (job #2114727) | Cod sursa (job #1672303) | Cod sursa (job #1816595) | Monitorul de evaluare | Cod sursa (job #294483)
Cod sursa(job #294483)
#include <fstream>
using namespace std;
#define nmax 500000
long long a[nmax+1],n;
void pulea_sort(long long n)
{
long long i,j,aux;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(a[i]>a[j])
{
aux=a[i];a[i]=a[j];a[j]=aux;
}
}
void heaps(long long n)
{
long long i,fiu,nodc,aux;
//faza1: facerea heap-ului
for(i=2;i<=n;i++)
{
nodc=i;
while(nodc/2 && a[nodc]>a[nodc/2])
{aux=a[nodc];a[nodc]=a[nodc/2];a[nodc/2]=aux;
nodc/=2;
}
}
//faza2: shtergerile repetate ale radacinii
for(i=n;i>=2;i--)
{
aux=a[i];a[i]=a[1];a[1]=aux;
nodc=1;
while(1)
{
fiu=2*nodc;
if(fiu>=i)break;
if(fiu+1<i && a[fiu+1]>a[fiu]) fiu++;//deci dupa asta
//fiu=indicele fiului de valoare maxima, evid. dak exista ambii fii
if(a[nodc]>=a[fiu])break;
aux=a[nodc];a[nodc]=a[fiu];a[fiu]=aux;
nodc=fiu;
}
}
}
int main()
{
ifstream fin("algsort.in");
n=0;
while(!fin.eof())
{
fin>>a[++n];fin.get();
}
pulea_sort(n);
long long i;
ofstream fout("algsort.out");
for(i=1;i<=n;i++)
fout<<a[i]<<" ";
fout.close();
return 0;
}