#include
2:
3:#define n 10000000
4:#define bitsperword 32
5:#define shift 5
6:#define mask 0x1f
7:
8:int arr[1+n/bitsperword];
9:/*
10:整個程式的思想就是:
11:1.每個整數有32位,那麼它就可以表示32個數,分別對應每bit位為1.
12:2.然後把10000000個數分為1+n/bitsperword組(相當於有這麼多個桶),每組包含接近32個數。
13:上面的解釋可能仍不到位,那我們來看具體的函式:
14:對於set函式,我們可以這樣理解,
15:arr[i>>shift] |= (1<<(i&mask))可以轉化為
16:arr[i/32] = arr[i/32] | (1<<(i%32))
17:i%32必然處於區間[0, 31],那麼1<<(i%32)就是將bit位1向前移動(i%32)位,然後和arr[i/32]相或,因而arr[i/32]的第(i%32)位就為1.
18:對於test函式,就是上面過程的反過程了。它是用來判斷i個這個數是否存在,即arr[i/32]的相應bit位是否為1.
19:最後,就做排序了,
20:for (int i = 0; i < n; i++)
21:由於[0, n)已經是從小到大排序好的,那麼我們只需判斷每個數是否存在,若存在,就輸出,所以輸出結果也就是排序的了。
22:
23:*/
24:
25:void setbit(int i)
26:
29:void clearbit(int i)
30:
33:
34:int testbit(int i)
35:
資料結構實現
一 二分法查詢 二分法查詢其實就是折半查詢,一種效率較高的查詢方法。針對有序陣列來查詢的。主要思想是 設查詢的陣列期間為array low,high 1 確定該期間的中間位置k 2 將查詢的值t與array k 比較。若相等,查詢成功返回此位置 否則確定新的查詢區域,繼續二分查詢。區域確定如下 a....
資料結構(一)遞迴 中位數
1 從鍵盤輸入求2的n次方 編寫程式,求2的n次方 mod 5 n為正整數,由使用者輸入,對應每個輸入,輸出乙個整數,求2的n次方 mod 5 的結果 includeusing namespace std int main return count int main struct index of ...
資料結構 實現棧
include include include define node len sizeof node 1 pstack ptop pstack pbottom都指向節點 typedef struct node pnode,node typedef struct stack pstack,stack...