程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 位向量排序

位向量排序

編輯:C++入門知識

1、位向量表示0~N的整數 在普通機器上,一個int型整數有4個字節,共32位,我們可以通過這32位中不同的位來表示不同的整數; 創建一個數組array[100],利用類的概念,array[0]存放32個除32等於0的整數,它的模數在32位中的相應位表示,相應的array[1]存放除32等於1的整數; 如: [cpp]   int i = 5;       // 5/32 = 0;     5%32 = 5   int j = 12;      // 12/32 = 0;    12%32 = 12   int k = 31;      // 31/32 = 0;    31%32 = 31   int m = 34;      // 34/32 = 1;    34%32 = 2   int n = 40;      // 40/32 = 1;    40%32 = 8   此時,這5個數在array中的存儲就應該是下面這種情況: array[0] = 0000 0100 0000 1000 0000 0000 0000 0001b array[1] = 0010 0000 1000 0000 0000 0000 0000 0000b array[2] = ... = array[99] = 0 模數在相應的位將0置為1,這樣就可以表示相應的整數了; 2、位向量排序 [cpp]   int main(void)   {       int i;       for(i = 0;i < N;i++)           clr(i);//復位整個數組       while(scanf("%d",&i) != EOF)           set(i);//把將要排序的數在數組中用位向量標記       for(i = 0;i < N;i++)           if(test(i))//用於比較i是否在數組中標記,若有標記就可以按順序輸出               printf("%d\n",i);       return 0;   }     N為需要排序的整數的可能最大值,clr函數將整個數組復位,然後set函數就是利用位向量的表示法將想排序的整數在數組中做一個標記; 當我們遍歷0~N的整數的時候,需要排序的整數肯定在這N個數裡面,只要利用test函數檢測i是否在數組中標記,就可以知道此數是否為我們要排序的數,如果有標記,直接輸出即可,這樣就可以達到排序的目的了; 3、算法分析 時間復雜度:O(N); 空間復雜度:O(N/32 + 1); 4、源碼——代碼分享

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved