Pagini recente » Cod sursa (job #1175812) | Cod sursa (job #2531763) | Cod sursa (job #2746733) | Cod sursa (job #1314624) | Cod sursa (job #1028112)
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
long V[500001],A[500001],B[500001];
FILE *f,*g;
using namespace std;
int main(){
f=fopen("algsort.in","r");
g=fopen("algsort.out","w");
long n,k,p=1,kk=0,minim= 0, pp=0,i,j,l;
fscanf(f,"%ld",&n);
k=sqrt(n);
for(i=0;i<n;i++)
{
fscanf(f,"%ld",&V[i]);
if( i%k == 0 )
A[i/k] = V[i];
A[i/k] = min( A[i/k], V[i]);
}
kk = n / k + !!(n%k);
for(j=0;j<n;j++)
{
minim=A[1];
for(i=0;i<kk;i++)
{
if(A[i]<=minim)
{
minim=A[i];
p=i;
}
}
fprintf(g,"%ld ",minim);
pp++;
long md,mt;
md=(k*p);
mt=md+k-1;
if(mt>=n)
mt=n-1;
for(l=md;l<=mt;l++)
if(V[l]==minim)
{
V[l] = ( 1<< 30);
break;
}
minim = V[md];
for( l = md; l <= mt; l++)
if(V[l] < minim)
minim = V[l];
A[p]=minim;
}
fclose(f);
fclose(g);
return 0;
}