C语言位排序

来源:互联网 发布:知乎日报 rss 编辑:程序博客网 时间:2024/06/03 20:29
/*超快速超省内存的位排序*/

#include<limits.h>  
#include<stdio.h>    
#define BITMASK(b) (1 << ((b) % CHAR_BIT))
#define BITSLOT(b) ((b) / CHAR_BIT)
#define BITSET(a, b) ((a)[BITSLOT(b)] |= BITMASK(b))
#define BITCLEAR(a, b) ((a)[BITSLOT(b)] &= ~BITMASK(b))
#define BITTEST(a, b) ((a)[BITSLOT(b)] & BITMASK(b))
#define BITNSLOTS(nb) ((nb + CHAR_BIT - 1) / CHAR_BIT)

char bitarray[BITNSLOTS(10000000)];//位数组最大容量10000000 bit

void main(){
    int i;
    for(int j=0;j<10;j++){//待排序数据的输入
        scanf("%d",&i);
        BITSET(bitarray, i);//对应位置1
    }

    for(int q=0;q<10000000;q++){
        if(BITTEST(bitarray, q)){//位遍历输出排序结果
            printf("%d\t",q);
        }
    }


}