Pagini recente » Cod sursa (job #2168470) | Cod sursa (job #1342131) | Cod sursa (job #2463753) | Cod sursa (job #775983) | Cod sursa (job #1309656)
#include <iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
#define oo 1<<31-1
using namespace std;
int a[500005],b[800];
int n,rad;
void citire()
{
ifstream fin("algsort.in");
fin>>n;
for(int i=1;i<=n;i++)
fin>>a[i];
fin.close();
rad = (int)sqrt((double)n);
}
void sortare()
{
ofstream fout("algsort.out");
int i,poz,minim,lg,j;
lg=1;
minim=a[1];
for(i=2;i<=n;i++)
{
minim=min(minim,a[i]);
if(i%rad==0)
{
b[lg]=minim;
lg++;
minim=a[i+1];
}
}
if(n%rad!=0)
{
minim=a[n];
i=n-1;
while(i%rad != 0)
{
minim=min(minim,a[i]);
--i;
}
b[lg]=minim;
}
else lg--;
int nr=0;
while(nr<=n)
{
minim=b[1];
poz=1;
for(i=2;i<=lg;i++)
{
if(minim>b[i])
{
minim=b[i];
poz=i;
}
}
fout<<minim<<" ";
nr++;
int k=(poz-1)*rad + 1;
i=poz*rad;
if(i>n) i=n;
for(j=k;j<=i;j++)
{
if(a[j]==minim)
a[j]=(oo);
}
minim=a[k];
for(j=k+1;j<=i;j++)
minim=min(minim,a[j]);
b[poz]=minim;
if(nr==n)
nr=n+2;
}
fout.close();
}
int main()
{
citire();
sortare();
return 0;
}