Pagini recente » Cod sursa (job #2389174) | Cod sursa (job #1200733) | Cod sursa (job #1544493) | Cod sursa (job #1379084) | Cod sursa (job #1040455)
#include<iostream>
#include<cmath>
#include<fstream>
#define maxim 2147483649;
using namespace std;
unsigned long v[500001],a[500001][2],i,j,n,l,mini;
unsigned long k=0,nr,el,mini2,poz;
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%lu",&n);
for(i=0;i<n;i++)
scanf("%lu",&v[i]);
l=sqrt(n);
mini=a[0][0]=v[0];
a[0][1]=0;
for(i=1;i<n;i++)
{
if(v[i]<mini && k>=(i/l)) {mini=a[i/l][0]=v[i]; a[i/l][1]=i;}
if (k<(i/l))
{k++;
mini=v[i];
a[i/l][0]=mini;
a[i/l][1]=i;}
}
mini=maxim;
if((float)n/l==n/l)
while(nr<n)
{for(i=0;i<n/l;i++)
{
if(a[i][0]<mini) {mini=a[i][0]; k=i;}
}
mini=maxim;
printf("%lu",a[k][0]);
v[a[k][1]]=a[k][0]=maxim;
for(j=k*l;j<k*l+l;j++)
{
if(v[j]<mini) {mini=v[j]; a[k][0]=v[j]; a[k][1]=j;}
}
nr++;}
else
while(nr<n)
{for(i=0;i<=n/l;i++)
{
if(a[i][0]<mini) {mini=a[i][0]; k=i;}
}
mini=maxim;
printf("%lu ",a[k][0]);
v[a[k][1]]=a[k][0]=maxim;
for(j=k*l;j<k*l+l && j<n;j++)
{
if(v[j]<mini) {mini=v[j]; a[k][0]=v[j]; a[k][1]=j;}
}
nr++;}
}