数据结构(五)位图算法
生活随笔
收集整理的這篇文章主要介紹了
数据结构(五)位图算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
位圖算法實現思想:
將需要排序的數字轉換為數組的下標,通過數組的下標完成對數據的排序,優點效率高,缺點浪費存儲空間。
| 1? | public?class?BitMapTest?{ |
| 2? | ??? /** |
| 3? | ??? ?*?參數說明: |
| 4? | ??? ?*?@param?buf?新定義的bit數組(int類型) |
| 5? | ??? ?*?@param?value?需排序的傳入數值 |
| 6? | ??? ?*?@return |
| 7? | ??? ?*? |
| 8? | ??? ?*?功能說明: |
| 9? | ??? ?*???? 將value值轉換為數組的下標,將數組buf的第value位置為1??? |
| 10? | ??? ?*???? buf[value?>>?5]表示value屬于int數組的第幾個成員 |
| 11? | ??? ?*???? value?&?0x1F?表示在對應int數組項中具體的第幾個bit位 |
| 12? | ??? ?*???? buf[value?>>?5]?|=?(1?<<?(value?&?0x1F))表示將對應數組項目中的bit位置為1 |
| 13? | ??? ?*/ |
| 14? | ??? public?static?void?encode(int?[]buf,int?value){ |
| 15? | ??? ??? buf[value?>>?5]?|=?(1?<<?(value?&?0x1F)); |
| 16? | ??? } |
| 17? | ??? |
| 18? | ??? /** |
| 19? | ??? ?*?參數說明 |
| 20? | ??? ?*?@param?buf?編碼后的bit數組 |
| 21? | ??? ?*?@param?value?傳入的bit數組下標 |
| 22? | ??? ?*?@return |
| 23? | ??? ?*? |
| 24? | ??? ?*?功能 |
| 25? | ??? ?*?判讀buf數組中相應的數據項中對用的bit位是否為?1 |
| 26? | ??? ?*/ |
| 27? | ??? public?static?int?decode(int?[]?buf,int?value){ |
| 28? | ??? ??? return?buf[value?>>?5]?&?(1?<<?(value?&?0x1F)); |
| 29? | ??? } |
| 30? | ??? |
| 31? | ??? public?static?void?main(String[]?args)?{ |
| 32? | ??? ??? int?a[]?=?{3,98,15,12,7,9,8,17,6,11}; |
| 33? | ??? ??? long?start?=?System.currentTimeMillis(); |
| 34? | ??? ??? int?LENGTH?=?a.length; |
| 35? | ??? ??? int?max?=?0,i=0; |
| 36? | ??? ??? |
| 37? | ??? ??? for?(i=0;i<LENGTH;i++){ |
| 38? | ??? ??? ??? if?(a[i]?>?max){ |
| 39? | ??? ??? ??? ??? max?=?a[i]; |
| 40? | ??? ??? ??? } |
| 41? | ??? ??? ??? System.out.print(a[i]+",?"); |
| 42? | ??? ??? } |
| 43? | ??? ??? System.out.println(); |
| 44? | ??? ??? |
| 45? | ??? ??? //?獲取int數組的長度,取排序數子中的最大值與數組長度中的二者的最大值 |
| 46? | ??? ??? max?=?max>LENGTH?max:LENGTH; |
| 47? | ??? ??? int?size?=?max/32+1;//98/32+1=4 |
| 48? | ??? ??? |
| 49? | ??? ??? int?[]r?=?new?int[size]; |
| 50? | ??? ??? for?(i=0;i<LENGTH;i++){ |
| 51? | ??? ??? ??? encode(r,a[i]); |
| 52? | ??? ??? } |
| 53? | ??? ??? |
| 54? | ??? ??? //?遍歷的長度大于max即可 |
| 55? | ??? ??? for?(i=0;i<max+1;i++){ |
| 56? | ??? ??? ??? if?(decode(r,i)?>?0){ |
| 57? | ??? ??? ??? ??? System.out.print(i?+?","); |
| 58? | ??? ??? ??? } |
| 59? | ??? ??? } |
| 60? | ??? ??? System.out.println(); |
| 61? | ??? ??? |
| 62? | ??? ??? System.out.println("time:"+(System.currentTimeMillis()-start)); |
| 63? | ??? } |
| 64? | } |
轉載于:https://www.cnblogs.com/jianyuan/p/5410974.html
總結
以上是生活随笔為你收集整理的数据结构(五)位图算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中科院分词ICTCLAS5.0_JNI
- 下一篇: 输入十个学生的成绩,判断及格不及格人数,