Pagini recente » Cod sursa (job #1141830) | Cod sursa (job #2327238) | Cod sursa (job #2612731) | Cod sursa (job #502852) | Cod sursa (job #1785591)
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int v[500001], A[10000], n, q, nr, l, v1[500001], x = 0;
void citire()
{
fin>>n;
for(int i = 0; i < n; ++i)
{
fin>>v[i];
}
}
void sirul()
{
int pozmin1, minim = 0x7fffffff;
for(int i = 0; i < n; ++i)
{
q = i / nr;
if(i % nr == 0 and q > 0)
{
v[pozmin1] = 0x7fffffff;
A[q - 1] = minim;
minim = 0x7fffffff;
}
if(v[i] < minim)
{
minim = v[i];
pozmin1 = i;
}
}
A[q] = minim;
v[pozmin1] = 0x7fffffff;
}
void sir(int poz)
{
int minim = 0x7fffffff, k = (poz + 1)*nr, pozmin1;
if(k > n) k = n;
for(int i = poz * nr; i < k; ++i)
{
if(v[i] < minim)
{
minim = v[i];
pozmin1 = i;
}
}
A[poz] = minim;
v[pozmin1] = 0x7fffffff;
}
int minimsm()
{
int min1 = 0x7fffffff, pozmin1;
for(int i = 0; i < l; ++i)
{
if(A[i] < min1)
{
min1 = A[i];
pozmin1 = i;
}
}
//cout<<min1<<" ";
sir(pozmin1);
return min1;
}
int main()
{
citire();
l = sqrt(n);
nr = l;
if(n != l * l)
{
l++;
}
nr = n / l;
if(n != nr * l)
{
nr ++;
}
sirul();
while(x < n)
{
v1[x] = minimsm();
x++;
}
for(int i = 0; i < n; ++i)
{
fout<<v1[i]<<" ";
}
}