Pagini recente » Cod sursa (job #1944329) | Cod sursa (job #2017436) | Cod sursa (job #2685477) | Cod sursa (job #2012635) | Cod sursa (job #2073221)
#include <iostream>
#include <fstream>
#include <cmath>
#include <limits.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int v[500400], n, l,m[800];
void citire()
{
int i;
f>>n;l=sqrt(n);
for(i=1;i<=n;++i)
f>>v[i];
f.close();
}
void minime ()
{ int i, j, mi=INT_MAX;
for(i=1,j=1;i<=n;i++)
{
if(v[i]<mi) mi=v[i], m[j]=i;
if(i%l==0)
// cout<<m[j]<<" ";
j++,mi=INT_MAX;
}
}
void afisarem()
{
for(int i=1;i<=l+1;i++)
cout<<v[m[i]]<<" ";
cout<<endl;
}
void batog()
{
int i, h,j, ind, k=1, x;
minime();
while(k<=n)
{ h=INT_MAX;
x=-1;
ind=-3;
for(i=1;i<=l+1;i++)
if(v[m[i]]>=0 && m[i]>0)
if(h>v[m[i]]) ind=i, x=m[i], h=v[x];
g<<h<<' ';
v[x]=-1;
h=INT_MAX;
if(ind>=1)
j=(ind-1)*l+1;
else j=1;
if(ind!=-3)
for(i=j;i<=((ind*l)<n?(ind*l):n);i++)
if(v[i]>=0)
if(v[i]<h) m[ind]=i, h=v[i];
k++;
}
g<<endl;
g.close();
}
int main()
{
citire();
batog();
}