Pagini recente » Cod sursa (job #1816085) | Cod sursa (job #2786239) | Cod sursa (job #2290930) | Cod sursa (job #3177598) | Cod sursa (job #1314189)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int N,pozitie[710];
unsigned int v[500005],minim[710];
int main()
{
f>>N;
int i,j,poz,p,nrb=0;
unsigned int mn;
int rad=sqrt(1.0*N);
for(i=1;i<=N;i++)
f>>v[i];
for(i=1;i<=rad*rad;i=i+rad)
{
mn=v[i];
for(j=i;j<i+rad;j++)
if(v[j]<=mn)
{mn=v[j]; poz=j;}
minim[++nrb] = mn;
pozitie[nrb] = poz;
}
if(rad*rad!=N)
{
mn=v[rad*rad+1];
for(i=rad*rad+1;i<=N;i++)
if(v[i]<=mn)
{mn=v[i]; poz=i;}
minim[++nrb]=mn;
pozitie[nrb]=poz;
}
for(i=1;i<=N;i++)
{
mn=minim[1]; poz=1;
for(j=1;j<=nrb;j++)
if(minim[j]<=mn)
mn=minim[j], poz=j;
g<<mn<<" ";
mn=v[pozitie[poz]]=2147483648U; //2^31
if(poz<=rad)
{
for(j=rad*(poz-1)+1;j<=rad*poz;j++)
if(v[j]<=mn)
{mn=v[j]; p=j;} //pozitia
}
else //in ultima bucata
{
for(j=rad*rad+1;j<=N;j++)
if(v[j]<=mn)
{mn=v[j]; p=j;} //pozitia
}
minim[poz]=mn; pozitie[poz]=p; //actualizam bucata poz
}
f.close(); g.close();
return 0;
}