程式設計珠磯學習筆記(1) 位排序

2021-05-06 07:04:09 字數 1912 閱讀 4286

#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 意思是在...