算法C语言实现:
#define bitsword 32
#define bitsbyte 8
#define bytesword 4
#define R (1<<bitsbyte)
#define digit(A,B) ((A)>>(bitsword-((B)+1)*bitsbyte)&(R-1))
void SortB(int a[],int l,int r,int m)
{
int i = l,j = r;
if (l >= r||m > bitsword)
{
return;
}
while (i != j)
{
while (digit(a[i], m) ==0&&(i < j)) {
++i;
}
while (digit(a[j], m) ==1&&(i < j)) {
--j;
}
if(a[i]!=a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
if (digit(a[r], m) ==0)
{
++j;
}
SortB(a,l,j-1,m+1);
SortB(a,j,r,m+1);
}
int main(int argc,const char * argv[]) {
int a[] = {1,0,1,0,1,0,1};
SortB(a,0,6,3);
return 0;
}