程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++刪除大量重復數字並且按升序排序(自己寫setbit來實現,時間空間都十分優化)

C++刪除大量重復數字並且按升序排序(自己寫setbit來實現,時間空間都十分優化)

編輯:C++入門知識

C++刪除大量重復數字並且按升序排序(自己寫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();
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved