Pagini recente » Cod sursa (job #2545022) | Cod sursa (job #986995) | Cod sursa (job #2449492) | Cod sursa (job #1038955) | Cod sursa (job #2341697)
#include <bits/stdc++.h>
#define k 500002
#define ll unsigned long long
using namespace std;
ll v[k],aux[k];
void sortare(ll in[],ll fin[],int a,int b,int bit)
{
if(a==b)fin[a]=in[a];
if(a>=b || bit<0)return ;
int st=a-1,dr=b+1,i;
for(i=a;i<=b;i++)
if( (1<<bit) & in[i] )
fin[--dr]=in[i];
else fin[++st]=in[i];
sortare(fin,in,a,st,bit-1);
sortare(fin,in,dr,b,bit-1);
}
char a[k*100],b[k*100];
int main()
{
fstream f("algsort.in",ios::in);
fstream g("algsort.out",ios::out);
int n;
int bit;
ll m=0;
f>>n;
for(int i=1;i<=n;i++)
{
f>>v[i];
m=max(m,v[i]);
}
for(bit=0;;bit++)
if(1<<(bit+1)> m)
break;
sortare(v,aux,1,n,bit);
for(int i=1;i<=n;i++)
g<<v[i]<<" ";
f.close();
g.close();
/*f.open("grader_test5.ok",ios::in);
g.open("algsort.out",ios::in);
f.getline(a,k);cout<<"new"<<a<<endl;
g.getline(b,k);cout<<"new"<<b<<endl;
for(int i=0;i<=strlen(a);i++)
if(a[i]!=b[i])
cout<<i<<endl;
cout<<strcmp(a,b);*/
}