Pagini recente » Cod sursa (job #1485635) | Cod sursa (job #1074242) | Cod sursa (job #2382378) | Cod sursa (job #2965162) | Cod sursa (job #1043875)
#include<iostream>
#include<fstream>
#include<math.h>
#include<stdio.h>
using namespace std;
#define maxim 999999999
long v[600001],a[600001];
int main()
{
long i,n,x,q,min,poz,m,ok,j,l,lung;
FILE *f,*g;
f=fopen("algsort.in","r");
g=fopen("algsort.out","w");
fscanf(f,"%d",&n);
q=sqrt(n);
for (i=1; i<=n; i++)
{
fscanf(f,"%d",&v[i]);
if (a[(i+q-1)/q]==0) a[(i+q-1)/q]=v[i];
else
if (a[(i+q-1)/q]>v[i]) a[(i+q-1)/q]=v[i];
}
lung=(n+q-1)/q;
for (i=1; i<=n; i++)
{
min=maxim;
for (j=1; j<=lung; j++)
if (a[j]<min) {min=a[j]; poz=j;}
fprintf(g,"%d ",min);
ok=1;
m=maxim;
for (j=(poz-1)*q+1; j<=poz*q; j++)
{
//if (j<=n)
if (v[j]==min && ok==1) {v[j]=maxim; ok=0;}
else if (v[j]<m) m=v[j];
}
a[poz]=m;
}
return 0;
}