使用Bitmap實現排序

2021-07-11 02:27:28 字數 2301 閱讀 8470

使用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...