Pagini recente » Cod sursa (job #308178) | Cod sursa (job #1815559) | Cod sursa (job #1769474) | Cod sursa (job #3205422) | Cod sursa (job #249501)
Cod sursa(job #249501)
#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);
}