實現位向量 1 6 2

2021-06-29 05:25:16 字數 1120 閱讀 1652

**

如何使用位邏輯(例如與、或、移位)來實現位向量?

解答:

**如下所示。

//如何使用位邏輯運算(例如與、或、移位)來實現位向量

/* from 'programming pearls' by jon bentley */

/* bitsort.c -- bitmap sort from column 1

* sort distinct integers in the range [0..n-1]

* 排序在0到n-1範圍內的無重複整數

*/#include

#define bitstepword 32 //表示乙個整型含有32個位

#define shift 5 //單次位移量

#define mask 0x1f //掩碼

#define num 10000000 //表示1000萬個整數

intarray[1 + num / bitstepword];//使用整型陣列模擬定義1000萬個位的陣列

/*功能:設定位陣列中的從0開始的第i位為1

*引數:需要設定為1的位

*/void

set(int i)

/* *功能:設定位陣列中的從0開始的第i位為0

*引數:需要設定為0的位

*/void clr(int i)

/* *功能:取出從0開始的第i位的值,用於檢測

*/void test(int i)

int main(void)

實現方法說明:

i >> shift:將i向右移動5位,相當於將i除以32位。因為乙個int是32位,所以結果表示i在第幾個int陣列成員中;

舉例說明:如果i是34,則結果是1,也就是從0開始的第1個int陣列成員。

1 << (i & mask):使用掩碼留下i的低5位再左移動1位,相當於除以32所得的餘數再左移動1位。因為第一是0,所以結果都需要左移動1位。結果中1所在的位表示i在該int陣列成員的第幾位上。

接著上例繼續說明,如果i是34,則i & mask是2,二進位制表示是10,再向左移動1位,得到100,也就反映出此時從0開始的第2位是1。

程式設計珠璣 自己實現位向量類

最近開始看 程式設計珠璣 了,傳說中的 看起來很眼熟啊,而過幾分鐘後又得出結論 以前從來沒讀過 剛看了第一章的內容,作者思考問題的方式和角度確實很好,前言提示說不要看太快,習題要一道一道跟著做,自己做過再去看答案。這一章的內容是磁碟排序的問題,用了位向量優化了排序 其實跟計數排序的原理差不多,就是利...

162 尋找峰值(JS實現)

峰值元素是指其值大於左右相鄰值的元素。給定乙個輸入陣列 nums,其中 nums i nums i 1 找到峰值元素並返回其索引。陣列可能包含多個峰值,在這種情況下,返回任何乙個峰值所在位置即可。你可以假設 nums 1 nums n 示例 1 輸入 nums 1,2,3,1 輸出 2 解釋 3 是...

使用位邏輯運算實現位向量,並實現大資料排序

首先,先把這些資料實現位向量 該例中資料型別為int,且為32位 define bitsperword 32 define shift 5 define mask 0x1f define n 10000000 int a 1 n bitsperwoed 把其對應位置0 void clr int i ...