Pagini recente » Cod sursa (job #328111) | Cod sursa (job #4613) | Cod sursa (job #229995) | Cod sursa (job #1079266) | Cod sursa (job #1043824)
#include<iostream>
#include<math.h>
#include<fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n, v[500001], s[800];
int main()
{
int i, l, mini, mini2, j, k, nr=0, ok, auxk, poz[500000], nrl;
f>>n;
nrl=sqrt(n);
l=n/nrl;
if(nrl+nrl!=n)
nrl++;
for(i=0;i<=n-1;i++)
f>>v[i];
for(i=0;i<=nrl-1;i++)
{
mini=2147483647;
for(j=i*l;j<=i*l+l-1&&j<n;j++)
if(v[j]<mini)
{
mini=v[j];
poz[i]=j;
}
s[i]=mini;
}
while(nr<n)
{
mini2=s[0];
auxk=0;
for(k=0;k<=nrl-1;k++)
{
if(s[k]<mini2)
{
mini2=s[k];
auxk=k;
}
}
v[poz[auxk]]=2147483647;
g<<mini2<<" ";
nr++;
mini2=2147483647;
poz[auxk]=auxk*l;
s[auxk]=mini2;
for(i=auxk*l;i<=auxk*l+l-1&&i<n;i++)
{
if(v[i]<mini2)
{
mini2=v[i];
poz[auxk]=i;
s[auxk]=mini2;
}
}
}
}