Pagini recente » Cod sursa (job #1695471) | Cod sursa (job #216444) | Cod sursa (job #2599755) | Cod sursa (job #2693194) | Cod sursa (job #1043083)
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;
#define maxim 999999999
unsigned long v[500001],a[50000];
int main()
{
unsigned long i,n,x,q,min,poz,m,ok,j,l,lung;
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
q=sqrt(n);
//cout<<q<<endl;
for (i=1; i<=n; i++)
{
f>>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];
//cout<<a[i/q]<<" ";
}
//for (i=1; i<=n/q; i++) cout<<a[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;}
g<<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;
//cout<<endl;
//for (l=1; l<=n; l++) cout<<v[l]<<" ";
}
return 0;
}