程式珠璣中第一章問題中,給出的實現是基於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 第三次變成 ...