Pagini recente » Cod sursa (job #1370960) | Cod sursa (job #2846106) | Cod sursa (job #1925934) | Rating Badila Victor Ioan (Victor_Badila) | Cod sursa (job #1058723)
#include <fstream>
#include <math.h>
using namespace std;
const long pinf=2147483647;
long v[500002],b[710];
int i,n,rad,bl,j,x,meen;
int getmin(int inc)
{
int meen=1+inc*rad;
for(int i=2+inc*rad;i<=rad*(inc+1) && i<=n;i++)
if(v[i]<v[meen])
meen=i;
return meen;
}
int mingb()
{
int mn=0;
for(int i=1;i<bl;i++)
if(v[b[i]]<v[b[mn]])
mn=i;
return mn;
}
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
f.close();
rad=sqrt(n);
for(i=0;i<(n+1)/rad;i++)
{
meen=1+rad*i;
for(j=2+rad*i;j<=rad*(i+1) && j<=n;j++)
{
if(v[j]<v[meen])
meen=j;
}
b[i]=meen;
bl++;
}
x=mingb();
while(v[b[x]]!=pinf)
{
g<<v[b[x]]<<" ";
v[b[x]]=pinf;
b[x]=getmin(x);
x=mingb();
}
g.close();
return 0;
}