设为首页 加入收藏

TOP

C++删除大量重复数字并且按升序排序(自己写setbit来实现,时间空间都十分优化)
2015-11-21 01:03:34 来源: 作者: 【 】 浏览:1
Tags:删除 大量 重复 数字 并且 排序 自己 setbit 实现 时间 空间 十分 优化
#include 
  
   
using namespace std;

template
   
     class Bitset { public: Bitset() { _Tidy();//调用_Tidy()函数会初始化所有位为0. } void Show()//显示01位. { for(int _I=0;_I<_N;_I++) { cout<<(test(_I)?'1':'0'); } } bool test(int _P)//测试该位置是否为真(1). { int _I = _P/32; return (A[_I]>>(_P%32))&0x1; } void _Tidy() { for(int _I=0;_I<_W;_I++) { A[_I] = 0; } } void set(int _P)//将_p下标设置为1. { int _I = _P/32; A[_I] |= (0x1<<(_P%32)); } void printf() { for(int _I=0;_I<_N;_I++) { test(_I) && (cout<<_I<<" "); } }//打印排列结果. private: typedef long LONG;//以long的4个字节为一个单位数组. enum{_Nw=(_N-1)/(sizeof(LONG)*8), _W=_Nw+1}; int A[_W]; }; int main() { Bitset<600> a; int b[]={1,1,1,1,2,2,3,3,34,2,423,42,34,23,1,1,3,213,123,21,3,3,4,32,543,5,46,3,45,35,23,42,3}; for(int i=0;i<33;i++) { a.set(b[i]); } a.printf(); }
   
  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇题目1125:大整数的因子 C++/Java 下一篇C++模板类复习

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: