当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 比较数据排序前后的查找次数

VC++
用VC++创建自定义向导程序
自定义 CRichEditCtrl 控件
Office 2000 风格的停泊、智能型菜单
黑客攻击手段之偷梁换柱
完善 CPopupText 类
让工具条显示256色图像
定制编辑框的上下文菜单
列表控件排序功能的实现
一个优秀的网格控件CGridCtrl
如何用代码动态添加控件
如何在编辑框中使用IAutoComplete接口
应用程序中添加“Coolbars”的简单方法
介绍一个有Toolbar功能的可重用类 CPopupText
在工具栏按钮上添加文本标签
类似Dreamweaver的颜色选择器
如何设置ListView控件的完全行(Full Row)选项
如何enable/disable菜单项
关于CEdit控件的透明 --作者:monsoon
动态菜单项、状态条提示、工具条提示问题
CAnimateCtrl::Open的使用问题

VC++ 中的 比较数据排序前后的查找次数


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 55 ::
收藏到网摘: n/a

比较数据排序前后的查找次数
作者:宋科
作者主页:kesongemini.diy.163.com

下载本文源代码

题目:
随机产生 1000 个 1-2000 以内的互不相同的整数,
1)存储于一个数组中(不排序)
2)存储于一个数组中(排序)
分别应用查找运算,要求输入一个查找元素,输出各自的查找比较次数。

要求:
1)查找元素 2
2)查找元素 1000


目的:
练习一下C++的神仙眷侣所提倡的用“类”来表达观点的编程风格。

用类来思考:

查找(CFind)是一个概念,作用于特定的数据(CData),因为数据有各种不同的特性,有排序了的(CDataSorted),和没有排序过的(CDataChaos),对于不同特性的数据,应该应用不同的查找方法, 对于排序过的数据(CDataSorted),应该使用一种查找方法(CFindBinarySearch), 对于没有排序过的数据(CDataChaos),应该使用另一种查找方法(CFindWorker), 呵呵,所以产生了如下的类图:

 +----------+ +-------+ + CFind +<>-------------------------->+ CData + +-+------+-+ +---+---+ ^ ^ ^ ^ ^ +--------+------+ ^ ^ ^ ^ +-----------+-+ +-+-----------------+ +-----+-------+ +---+--------+ + CFindWorker + + CFindBinarySearch + + CDataSorted + + CDataChaos + +-------------+ +-------------------+ +-------------+ +------------+
这样的话,用户就可以通过派生CData类来加入新的存储格式的数据,通过派生CFind类来加入新的查找方法了, 不过,一般来说,查找方法都是和数据存储方式紧密耦合的,所以,嘿嘿嘿,..., 请注意我的目的呀,我只是为了练习C++才这样写的,哈哈:) 我想一定会有很多人大骂我白痴的吧,哈哈哈哈~~哈哈哈哈,就当耳旁风,不听。:)

数据的基类:(每个类的实现请在本文提供的源代码中查找)

class CData{public:	CData();	CData(int iNum, int iMax); // generate the data : _v	virtual ~CData(){};	CData(const CData& rhs);	void get_data(vector& v);protected:	vector _v;private:	CData& operator=(const CData& rhs);	const int _iMin;};
排序数据类:
class CDataSorted : public CData{public:	CDataSorted(CData rhs);	virtual ~CDataSorted(){};private:	CDataSorted();	CDataSorted& operator=(const CDataSorted& rhs);};
原始数据类:
class CDataChaos : public CData{public:	CDataChaos(CData rhs);	virtual ~CDataChaos(){};private:	CDataChaos();	CDataChaos& operator=(const CDataChaos& rhs);};
查找的基类:
class CFind{public:	CFind(const CData& data);	virtual ~CFind();	virtual bool to_find(int elem, int& num);protected:	CData* _pdata;private:	CFind& o