C++程序设计实验报告(八十二)---第十六周任务#3-2(学会二分查找)

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2012, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:字典(二分查找)

* 作 者: 刘镇
* 完成日期: 2012 年 06 月 05日
* 版 本 号: 1.078

* 对任务及求解方法的描述部分
* 输入描述: ......

* 问题描述: ......

* 程序输出: ......

* 程序头部的注释结束
*/

#include<fstream>   

#include<iostream>   

#include<iomanip>   

#include<string>   

using namespace std;  

class Dictionary  
{  
public:  
	void write_dictionary(ifstream & in);  
	string get_e();  
	string get_c();  
	string get_w();  
private:  
	string e;  
	string c;  
	string w;  
};  

void Dictionary::write_dictionary(ifstream & in)  
{  
	in >> this->e >> this->c >> this->w;  
}  

void writefile(Dictionary * d, int num)  
{  
	ifstream infile( "dictionary.txt", ios::in );  

	if(!infile)  
	{  
		cerr << "open error" << endl;  

		exit(1);  
	}  
	for(int i = 0; i < num; ++i)  
	{  
		d[i].write_dictionary(infile);  
	}  

	infile.close();  
}  

string Dictionary::get_e()  
{  
	return this->e;  
}  

string Dictionary::get_c()  
{  
	return this->c;  
}  

string Dictionary::get_w()  
{  
	return this->w;  
}  

void search(Dictionary * d, int num)  
{  

	string find_word;  

	do  
	{  
		int low = 0;  
		int mid = 0;   
		int high = num - 1;
		bool flag = false;  

		cout << "请输入您要查找的英文单词: " << endl;  

		cin >> find_word;  

		while(low <= high)  
		{  
			mid = (low + high) / 2;  

			if(d[mid].get_e() == find_word)  
			{  
				cout << d[mid].get_e() << '\t';  
				cout << d[mid].get_w() << '\t';  
				cout << d[mid].get_c() << endl;  
				flag = true;  
				break;  
			}  
			if(d[mid].get_e() < find_word)  
			{  
				low = mid + 1;  
			}  
			else  
			{  
				high = mid - 1;  
			}  
		}  

		if(flag == false && find_word != "0000")  
		{   
			cout << "未找到该单词!" << endl; 
		}  

	}while(find_word != "0000");  
}  

int main()  
{  
	Dictionary dic[8000];  
	string find_word;  

	writefile(dic, 8000);  
	search(dic, 8024);  


	system("pause");  
	return 0 ;  
}  



运行结果:与上篇博文无太大差别

缺点:不知道为啥要在search()中数字为8024

心得体会:

二分查找当初在做上学期题目的字典时觉得是挺麻烦的,但是经过下学期的提高,真的感觉到理解能力提高了,在百度上打上二分查找,读一段代码,即可解决问题。用书面语言讲就是折半法,将你所用的分段查找,精确定位,省去了要从头找到位的麻烦。但由于实现排序,才能实现分割,也带来了不便于插入的缺点。

提供我学习的一个代码(重在体会):http://wenku.baidu.com/view/4632e62acfc789eb172dc836.html

感言:

这个问题就只有几个难点:二分查找算一个(较简单),对类的处理数据成员(三个字符串数组)一个,文件读入一个(将其做成函数)


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值