利用位運算解決排序問題(摘自程式設計珠璣)

2021-05-22 21:17:02 字數 488 閱讀 7494

問題背景:

已知資料的取值範圍在0~10000000,且所取資料不重複,將輸入的資料排序並盡可能的使用少的記憶體空間

#define bitsperrword 32

#define shift 5

#define mask 0x1f

#define n 10000000

#include

int a[1+n/bitsperrword];

void set(int i)

void clr(int i)

int test(int i)

int main(){

int i;

for (i=0;iclr(i);

for(i=0;iif(test(i))

printf("%d/n",i);

return 0;

該程式本身沒有什麼問題,不過自己在利用scanf函式進行輸入的時候,卻不能很好的結束。

暫留此一疑問。

利用位運算解決組合問題

求n個資料的組合 由數學知識,可以知道一共有2n個子集 用二進位制進行對照會非常直觀 子集空集 a1a0 a1 a0 a2a2,a0 a2,a1 a0,a1,a2 二進位制數 0 0 0 0 1 0 0 0 1 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 給出n個資料,問從這n個資料...

期末程式設計 利用位運算加密

include include define n p 8 define n k 3 int main 得到八個字元的字串實際長度是九個位元組,會把 0 會把key 0 擠掉 key 0 key 0 sizeof key 0 8 n k newkey 0 key 0 3 key 0 sizeof ke...

位運算解決N 皇后問題

描述 位運算是定義在整數上的運算。但在做位運算的時候,並不把整數看作整數,而是將它們看做一系列二進位制數字,逐位進行運算。位運算有6種,他們的名稱,運算子及運算規則如下 與 and 5 6 4 101 110 100 或 or 5 6 7 101 110 111 異或 xor 5 6 3 101 1...