Pagini recente » Cod sursa (job #1296053) | Cod sursa (job #2298906) | Cod sursa (job #3335989) | Cod sursa (job #1373299) | Cod sursa (job #2073205)
#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];
++v[i];
}
f.close();
}
void minime ()
{ int i, j, h=0, 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)
j++,mi=INT_MAX;
}
}
void afisarem()
{
for(int i=1;i<=l+1;i++)
cout<<m[i]<<" ";
cout<<endl;
}
void batog()
{
int i, h,j, ind, k=1, x;
minime();cout<<l<<endl;
afisarem();
while(k<n)
{ h=INT_MAX;
x=-1;
ind=-3;
for(i=1;i<=l+1;i++)
if(v[m[i]]>0)
if(h>v[m[i]]) ind=i, x=m[i], h=v[x];
g<<h-1<<' ';
v[x]*=(-1);
h=INT_MAX;
if(ind>1)
j=ind*(l-1)+1;
else j=1;
if(ind!=-3)
for(i=j;i<=ind*l;i++)
if(v[i]>0)
if(v[i]<h) m[ind]=i, h=v[i];
k++;
}
g<<endl;
g.close();
}
int main()
{
citire();
batog();
}