Pagini recente » Cod sursa (job #1180186) | Cod sursa (job #1770414) | Cod sursa (job #1220244) | Cod sursa (job #1275218) | Cod sursa (job #1274617)
#include<iostream>
#include<fstream>
#include<cmath>
#include<climits>
using namespace std;
#define maxn 1000000
#define maxb 1000
int n, a[maxn],b[maxb],c[maxn],k;
void minim()
{
int i,m,poz,l,gasit=0;
l=sqrt((double)(n));
m=INT_MAX;
for(i=0; i<l; i++)
if(b[i]<m) {m=b[i]; poz=i;}
for(i=poz*l; i<poz*l+l && gasit==0; i++)
if(a[i]==m) {a[i]=INT_MAX; gasit=1;}
c[k++]=m;
b[poz]=INT_MAX;
for(i=poz*l; i<poz*l+l; i++)
if(a[i]<b[poz]) b[poz]=a[i];
}
int main()
{
int l,i;
ifstream f("algsort.in");
f>>n;
l=sqrt((double)(n));
for (i=0;i<n;i++) f>>a[i];
f.close();
for(i=0; i<l; i++) b[i]=INT_MAX;
for(i=0; i<n; i++)
if(a[i]<b[i/l]) b[i/l]=a[i];
while(k<n)
minim();
ofstream g("algsort.out");
for(i=0; i<k; i++) g<<c[i]<<" ";
g.close();
}