Pagini recente » Cod sursa (job #1061570) | Cod sursa (job #2926529) | Cod sursa (job #2232602) | Cod sursa (job #2091350) | Cod sursa (job #1040279)
#include<iostream>
#include<cmath>
#include<fstream>
#define maxim 2147483649;
using namespace std;
unsigned long v[500001],a[500001][2],i,j,n,l,mini;
unsigned long k=0,nr,el,mini2,poz;
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
for(i=0;i<n;i++)
f>>v[i];
l=sqrt(n);
mini=a[0][0]=v[0];
a[0][1]=0;
for(i=1;i<n;i++)
{
if(v[i]<mini && k>=(i/l)) {mini=a[i/l][0]=v[i]; a[i/l][1]=i;}
if (k<(i/l))
{k++;
mini=v[i];
a[i/l][0]=mini;
a[i/l][1]=i;}
}
mini=maxim;
if((float)n/l==n/l)
while(nr<n)
{for(i=0;i<n/l;i++)
{
if(a[i][0]<mini) {mini=a[i][0]; k=i;}
}
mini=maxim;
g<<a[k][0]<<" ";
v[a[k][1]]=a[k][0]=maxim;
for(j=k*l;j<k*l+l;j++)
{
if(v[j]<mini) {mini=v[j]; a[k][0]=v[j]; a[k][1]=j;}
}
nr++;}
else
while(nr<n)
{for(i=0;i<=n/l;i++)
{
if(a[i][0]<mini) {mini=a[i][0]; k=i;}
}
mini=maxim;
g<<a[k][0]<<" ";
v[a[k][1]]=a[k][0]=maxim;
for(j=k*l;j<k*l+l && j<n;j++)
{
if(v[j]<mini) {mini=v[j]; a[k][0]=v[j]; a[k][1]=j;}
}
nr++;}
}