Pagini recente » Cod sursa (job #2895538) | Cod sursa (job #1565341) | Istoria paginii runda/test_icrisop_2 | Cod sursa (job #2224977) | Cod sursa (job #249503)
Cod sursa(job #249503)
#include<stdio.h>
int n,i,a[500002];
void radix(int st, int dr, int bit);
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",&a[i]);
radix(1,n,31);
for(i=n;i>=1 ;i--)
{ if(a[i]>=0)break;printf("%d ",a[i]);}
for(i=1;i<=n;i++)
{ if(a[i]<0)break;printf("%d ",a[i]);}
return 0;
}
void radix(int st, int dr, int bit)
{
int s=st,d=dr,b=1<<bit,aux;
if(bit==-1 || st==dr)
return;
while(d-s-1){
if(a[s]&b){
aux=a[s];
a[s]=a[d];
a[d]=aux;
d--;
}
else
s++;
}
if(s<=dr)radix(st,s,bit-1);
if(d>=st)radix(d,dr,bit-1);
}