Pagini recente » Cod sursa (job #321663) | Cod sursa (job #1437545) | Cod sursa (job #1443476) | Cod sursa (job #637872) | Cod sursa (job #1314784)
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
int a[500005], n, nrSir, m, v[500005], b[810], k=0;
int minim(int sir)
{
int minSir = a[sir*m+1];
int poz = sir*m+1;
for (int j=sir*m+2; j<=(sir+1)*m && j<=n; j++)
if (minSir>a[j])
{
minSir=a[j];
poz = j;
}
a[poz]=INFINITY;
return minSir;
}
void minim2()
{
int p=0, i;
int minSir=b[0];
for (i=1; i<nrSir; i++)
if (minSir>b[i])
{
minSir=b[i];
p=i;
}
v[k++]=minSir;
b[p]=minim(p);
}
int main()
{
int i;
fin >> n;
for (i=1; i<=n; i++)
fin >> a[i];
m=sqrt(n);
nrSir=m;
while(nrSir*m<n)
nrSir++;
for (i=0; i<nrSir; i++)
b[i] = minim(i);
for (i=1; i<=n; i++)
minim2();
for (i=0; i<n; i++)
fout << v[i] <<' ';
fin.close();
fout.close();
return 0;
}