簡單的位排序實現

2021-06-19 04:55:37 字數 925 閱讀 8223

程式珠璣中第一章問題中,給出的實現是基於int型陣列的,我自己改改採用char字元陣列實現。

簡單說明一下,因為採用的是char型別,那麼乙個字元佔據的位數就是bitsperchar=sizeof(char)*8了,那麼如果有n位數字需要排序,那麼需要的陣列大小就是n/bitsperchar+1。字元陣列中,每乙個字元都有bitsperchar位,所以乙個整數n,計算他在陣列的下標就是n/bitsperchar了,利用移位運算的特性,其實在這裡就是n>>3。接著算出具體是在哪一位應該是n mod bitsperchar 了,即n%8,利用位運算的特性,模8其實就是n與二進位制數0000 0111(0x7)求與,然後將1移到指定的位置,1《最後用到乙個generaterand函式,我把他的實現也貼出來了,這個函式可以保證生成的數字是不重複的。

#include
//每乙個字元的位數

#define bitsperchar sizeof(char)*8

//移位

#define shift 3

//需要排序的數量

#define n 1000

//掩碼

#define mask 0x7

//根據n求出字元陣列的大小,一位代表乙個數字

char a[1+ n/bitsperchar];

//set函式用於設定第i位

void set(int i)

//cls函式用於清除第i位

void cls(int i)

//test函式用於檢驗第i位

int test(int i)

int main()

int* generaterand(int n){

int* array = (int*)malloc(n*sizeof(int));

int i,a,b;

for(i=0;i

python 排序的簡單實現

獲取最小的引數 獲取第乙個引數,並且使用分片去掉第乙個,留下剩下的引數。def min1 arg res args 0 for arg in arg 1 if arg res res arg return res 讓python自動獲取第乙個引數以及其他的引數。def min2 fist,rest ...

C 實現簡單的排序

include using namespace std 交換陣列中兩個元素的位置 void swap int array,int i,int j 選擇排序法 void selectsort int array,int a swap array,i,minindex 氣泡排序法 void bubble...

氣泡排序的簡單實現

冒泡的意思就是一次迴圈中依次比較相鄰位置的數,滿足則交換。第乙個for代表次數,第二個for來真正的兩兩比較。冒泡的關鍵在於迴圈條件的次數確定,先看第乙個for迴圈是length 1,比如5個數 5 3 1 2 0,那麼看第一次比較後變成3 1 2 0 5 第二次變成 1 20 3 5 第三次變成 ...