Pagini recente » Cod sursa (job #1832469) | Cod sursa (job #1783880) | Cod sursa (job #472091) | Cod sursa (job #1360751) | Cod sursa (job #1315766)
#include <iostream>
#include <cmath>
using namespace std;
const int NMax = 500002;
int v[NMax];
int u[NMax];
int Intervals[800];
int interval_len;
int nrintervals;
int n;
void Update_Interval(int i)
{
int minim=INFINITY,pozminim;
for(int j = (i-1) * interval_len + 1 ; (j<=i * interval_len) && (j<=n) ; j++)
{
if(v[j]< minim)
{
minim = v[j];
pozminim = j;
}
}
Intervals[i]= minim;
v[pozminim]= INFINITY;
}
int getMin()
{
int pozminim,minim = INFINITY;
for(int i=1;i<=nrintervals;i++)
{
if(Intervals[i]< minim)
{
minim = Intervals[i];
pozminim = i;
}
}
Update_Interval(pozminim);
return minim;
}
void BatogSort()
{
int i;
interval_len = sqrt(n);
nrintervals = n/interval_len;
if (!interval_len)
interval_len = 1;
if (nrintervals*interval_len<n) ++nrintervals;
int k = 1;
//Build initial Array
for(i=1;i<=nrintervals;i++)
{
Update_Interval(i);
}
for(i=1;i<=n;i++)
{
u[k++]=getMin();
}
}
int main()
{
int i;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
cin>>n;
for(i=1;i<=n;i++)
{
cin>>v[i];
}
BatogSort();
for(i=1;i<=n;i++)
cout<<u[i]<<" ";
}