位图排序

来源:互联网 发布:mac 10.12懒人版下载 编辑:程序博客网 时间:2024/05/22 17:42
#include "stdafx.h"#include<iostream>#include<bitset>using namespace std;namespace chapter1{/*位图排序,可以看做是一种哈希表要求数据不能重复(哈希表的键不能重复)xc                                                                                                                                                                                                                                                                                                                      同时数据的最大范围确定,用来位数的最大值缺点:空间浪费,在数据很少,但是个别数据很大的时候会有很多的空位只能处理整数*/const int MAX_NUM = 64;int bitMapArray[MAX_NUM]; void setBit(int n){bitMapArray[n / 32] |= ((unsigned)1 << (n % 32));} void resetBit(int n){bitMapArray[n / 32] &= ~(1 << (n % 32));} bool isBitSet(int n){return bitMapArray[n / 32] & (1 << (n % 32));} void sort(int data[],int length) { for (int i = 0; i < length; i++) setBit(data[i]); for (int i = 0; i < MAX_NUM;i++) if (isBitSet(i)) cout << i << ' '; cout << endl; }//利用C++ stl库的bitset实现bitset<MAX_NUM>bitMap;void sortUsingBitset(int data[], int length){for (int i = 0; i < length; i++)bitMap.set(data[i]);for (int i = 0; i < MAX_NUM;i++)if (bitMap.test(i))cout << i << ' ';cout << endl;}void test(){int a[] = { 34, 21, 57, 1, 3, 9 };//测试数据少,空间利用率很低sort(a, 6);sortUsingBitset(a, 6);}}int _tmain(int argc, _TCHAR* argv[]){chapter1::test();return 0;}

0 0
原创粉丝点击