Cod sursa(job #1043976)
| Utilizator | Data | 29 noiembrie 2013 09:05:07 | |
|---|---|---|---|
| Problema | Sortare prin comparare | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.12 kb |
#include<fstream>
#include<math.h>
using namespace std;
#define max 2147483647;
int N, v[500000], w[500000], a[710];
int main()
{
int i, j, k, in, l, p, nr=0;
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>N;
for(i=0; i<N; i++)
f>>v[i];
l=sqrt(N);
if(l*l==N)
in=N/l;
else
in=N/l+1;
for(i=0; i<in; i++)
{
p=v[i*l];
for(j=i*l+1; j<i*l+l && j<N; j++)
if(v[j]<p)
{
p=v[j];
w[i]=j;
}
a[i]=p;
}
while(nr<N)
{
p=a[0];
k=0;
for(i=0; i<in; i++)
{
if(a[i]<p)
{
p=a[i];
k=i;
}
}
v[w[k]]=max;
g<<p<<" ";
nr++;
p=max;
w[k]=k*l;
a[k]=p;
for(j=k*l; j<=k*l+l-1 && j<N; j++)
{
if(v[j]<p)
{
p=v[j];
w[k]=j;
a[k]=p;
}
}
}
f.close();
g.close();
}
