#include
#define bitsperword 32
#define shift 5
#define mask 0x1f
#define n 10000000
int a[1 + n/bitsperword];
inline void set_bit(int i)
inline void clear_bit(int i)
inline inttest_bit(int i)
int main()
while (scanf("%d", &i) != eof)
set_bit(i);
for (i = 0; i < n; i++)
}return 0;}
#include
/*每wordr
的位數,這裡用的是
int型4位元組
32位*/
#define bitsperword 32
/*這裡是每個
int型的偏移量,2的
5次方是
32,即1左移
5位是32*/
#define shift 5
/*十六進製制1f,
用於作掩碼來計算
n在某一
word
中位於第幾位。如計算
i & mask
等價於i %32
,但位操作效能會更高一些*/
#define mask 0x1f
#define n 10000000
/*n/bitsperword為n
位需要多少個
word,加1
是向上取整,
即寧可多幾位也不能少1位
*/ /*分配靜態陣列用於儲存各資料位*/
int a[1 + n/bitsperword];
/* *用於設定第i 位
*/inline void set_bit(int i)
/* *
清位是置位的逆運算,與置位類似找到
i所在的
word
,然後再
*找到其在該
word
中的位,
與set
相反的是它將該位取反為
0,然後
* 進行與操作
*/inline void clear_bit(int i)
/* *
測試i位是否被置位,即找到第
i位然後看該位是否為1
*找位的過程和上面相同,然後令該位和
1進行與操作
*如果為
0則沒有置位,如果不為
0則該位被置
*/inline inttest_bit(int i)
int main()
/*使用檔案等輸入方式,輸入所有的整數*/
while (scanf("%d", &i) != eof)
set_bit(i);/*
置每乙個整數*/
/*列印出所有存在的整數*/
for (i = 0; i < n; i++)
}return 0;}
舉個簡單的例子,如果我們有一組亂序的整數存在檔案
file-data.tmp
中,我們希望對其進行排序:
100 4
98 34
56234
假設上面的程式編譯後的可執行檔案為
bit-sort
,那麼在
linux
作業系統中,我們可以使用如下的方式對檔案內的亂序整數進行排序:
% cat file-data.tmp | bit-sort
輸出結果為: 4
34 56
98100
234
程式設計珠磯學習筆記(7) 改善效能
使用各種方法對效能進行改善。這裡只簡單列出書內的一些效能優化方法和結果。更多請參考 乙個天體物理學研究方面的程式不斷優化的結論 更多還請參考原著 p58 大家可以以此作為優化程式的參考 1 優化的順序 2 優化的著眼點。1問題定義 問題說明和效率具有微秒的互動作用。良好的說明有時會很好的提供使用者認...
程式設計珠磯學習筆記(4) 擠壓法查詢變位詞
如示例 input 單詞檔案 output 同位詞歸類檔案 constrain 歸類所有為同位詞的單詞 何為同位詞 單詞字母相同,但字母的順序不同 pans 和snap 是同位詞 pots stop 和tops 是同位詞,還有這些 第一步 對每個單詞進行簽名。如這些單詞 我們使用每個單詞的字母序列 ...
演算法學習筆記 1 排序演算法
在本文中將列出幾種常用的排序演算法原始碼。選擇排序演算法 選擇排序 注意陣列第乙個數下標是0 不提供輸出 void selectsort int a,int n 該寫法表示按著從大到小排序,a如果需要進行結構體排序那麼 struct node nd 10 cmp node a,node b 意思是在...