使用bitmap實現排序,是通過在bitmap將待排序列表中的數值位標記為1,然後順序輸出bitmap的標記位實現排序的方法。具體來說,分為兩步:
1、迴圈待排序列表,i 表示待排序列錶值。bitmap[i]=1
二、實踐篇
參考一篇python實現的bitmap
#encoding:utf-8__author__ ='yqq'#!/usr/bin/env python
classbitmap(object):
def__init__(self, max):
self.size = self.getelementindex(max,true)
self.array = [0
fori
inrange(self.size)]
defgetelementindex(self,number,up=false):
'''返回給定元素在bitmap中的位置(slot)
:paramnumber:
:paramup:取整方向,true表示向上取整,false表示向下取整
:return:slot index
'''ifup:
returnint( (number + 31 -1) / 31 )
else:
returnnumber / 31
defgetelementslot(self, num):
returnnum % 31
defset(self,number):
'''將元素位標記為1
:paramnumber:
:return:
'''elementindex = self.getelementindex(number)
elementslot = self.getelementslot(number)
element = self.array[elementindex]
self.array[elementindex] = element | (1
<< elementslot)
defclear(self,number):
elementindex = self.getelementindex(number)
elementslot = self.getelementslot(number)
element = self.array[elementindex]
self.array[elementindex] = element & (~(1
<< elementslot))
defisset(self,number):
elementindex = self.getelementindex(number)
elementslot = self.getelementslot(number)
ifself.array[elementindex] & (1
<returntrue
returnfalse
if__name__ =='__main__':
max = 11
unsort_array = [5, 2, 1, 9]
sorted_array =
bitmap = bitmap(max)
foriinunsort_array:
bitmap.set(i)
foriinrange(0,max):
ifbitmap.isset(i):
printsorted_array
在python中使用BitMap排序
使用bitmap對整數陣列排序時首先我們要分配這個bitmap的大小,獲取陣列中的最大整數 m,m 31 1 除以31向上取整,比如乙個未排序陣列最大數不超過60,那麼得到結果為2,意思是我們需要兩個int型資料大小的空間來存放這個陣列。bm a 0 a 1 a 0 和a 1 就是我們申請到的資源,...
排序之bitmap排序
所謂的bit map就是用乙個bit位來標記某個元素對應的value,而key即是該元素。由於採用了bit為單位來儲存資料,因此在 儲存空間 方面,可以大大節省。如果說了這麼多還沒明白什麼是bit map,那麼我們來看乙個具體的例子,假設我們要對0 7內的5個元素 4,7,2,5,3 排序 這裡假設...
利用BitMap進行排序
利用bitmap可以對某些資料進行排序,但是限制條件是必須實現知道資料的範圍,而且不能重複,類似於桶排序,但是比桶排序更加節省記憶體。原理很簡單,就是設定陣列某一位的數在bitmap中對應位為1,然後遍歷陣列就可以得到結果。這裡以100以內的乙個陣列排序為例 例如陣列 intarray 則設定bit...