码迷,mamicode.com
首页 > 其他好文 > 详细

小代码 位图

时间:2016-05-29 23:29:08      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:小代码   位图

#include<iostream>
#include<vector>
#include<string>
using namespace std;
 class bitmap
{
 public:
  bitmap(size_t n):_size(0)
  {
   _a.resize((n>>5)+1);
  }
 
void set(size_t x)
{
size_t index=x>>5;
size_t num=x%32;
 _a[index] |=(1<<num);
 }
void reset (size_t x)
{
size_t index=x>>5;
size_t num=x%32;
_a[index] &=~(1<<num);  
}
bool test(size_t x)
{
size_t index=x>>5;
size_t num=x%32;
return _a[index&(1<<num)];
}
protected:
vector<size_t>_a;
size_t _size;
};
/***********
//size 不能简单的size++
	//需要之前判断是存在
	//库里面的名字是bitset
		size_t   -1
		pow2(32)
		优点 省空间
		缺点 不能表示次数
********/
void test(int n)
{
	bitmap bp(100);
	cout<<"begin:"<<bp.test(n)<<endl;
	bp.set(n);
	cout<<"then:"<<bp.test(n)<<endl;
	bp.reset(n);
	cout<<"then:"<<bp.test(n)<<endl;
	cout<<"--------"<<endl;
}
int test2(int len)
{
	//int a[]={1,3,5,2,4,6,6,7,7,9,1,2,3};//测试通过
	//int a[]={1,3,5,2,4,6};
int tmp,i,j;  int ct=0;
	int a[10]={0};
	for(i=0;i<10;i++)
	{
	a[i]=len-i;
	}
	 
//int len=sizeof(a)/sizeof(a[0]);
for(i=1;i<len;i++)
{
	tmp=a[i];
	j=i-1;
while(a[j]>tmp)
{
a[j+1]=a[j];
j--;
ct++;
}
a[j+1]=tmp;
}
for(i=0;i<len;i++)
{
cout<<a[i]<<" " ;
}
cout<<endl<<"n="<<len<<" ct"<<ct<<endl;
 
return 0;
}
/****
int main()
{
	 int n=10;
	test2(4);
	test2(5);
	test2(6);
	test2(7);
	cin>>n;
	return 0;
}
****/
int main()
{
	 
}
/*********
比较次数和移动数据次数是一致的
时间复杂度O(n^2)
最坏情况下n(n-1)/2 次
可推理 也可由程序输出的 n ct序列看出规律
***********/

技术分享

小代码 位图

标签:小代码   位图

原文地址:http://wzsts.blog.51cto.com/10251779/1784257

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!