//位排序:在计数 排序基础上,把字节数组折算成位数组,依然用用数组下标作为待排序数处理.根据位操作将位数组元素值1.减少计数排序空间浪费
void sort(int *array,int length)
{
int i;
int max=array[0];
for(i=0;i<length;i++)
{
if(max<array[i])
{
max=array[i];
}
}
int n=max/32+1;
int *ptr=(int*) malloc(n*sizeof(int));
bzero(ptr,sizeof(ptr));
for(i=0;i<length;i++)
{
int n_blck=array[i]/32;//存储ptr数组的第几个元素
int n_index=array[i]%32;//存储ptr数组的第几个元素第几位
unsigned int base=0x1;
//base=base>>n_index;
base=base<<(31-n_index);
ptr[n_blck]=ptr[n_blck]&base;
}
int j;
for(i=0;i<n;i++)
{
for(j=0;j<32;j++)
{
unsigned int base=0x1;
//base=base>>j;
base=base<<(31-j);
//printf("%d\n",base);
if((ptr[i]&base)!=0)
{
printf("%d\t",i*32+j);
}
}
}
printf("\n");
free(ptr);
ptr=NULL;
}