本科学生综合性实验报告
姓名___ 刘春云
学号_ 0103918__
_
专 业_ _软件工程__ 班级_ 103_ _
实验项目名称_二分搜索问题的分治算法实验
指导教师及职称_____赵晓平___ _ _
开课学期
2011
至_ 2012 学年_ 3 _学期
上课时间
2012 年 2 月
18 日
学生实验报告(1)
学生姓名
刘春云
学号
0103918
实验项目 二分搜索问题的分治算法实验
同组人:无
■必修 □选修 □演示性实验 □验证性实验 ■操作性实验 □综合性实验
实验地点
W202
实验仪器台号
指导教师
赵晓平
实验日期及节次 2012-2-18
一、问题描述
二分查找又称折半查找,即在一串已排好序的需要处理的数据中多次用折半的方法查找出
要搜索出的数据。
二、解题思路
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字
比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子
表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进
一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直
到子表不存在为止,此时查找不成功。
三、算法描述
用一个数组来存储数据,具体的结构体为:
typedef struct list
{
double elem[100];
int
length;
}list;其中 length 是数据的总个数
比较表中间位置记录的关键字与查找关键字的大小,逐步缩小查找范围
实现代码为:
while(low
mid=(low+high)/2;
if(l.elem[mid]==key)
{
}
outfile<<"你所要搜索的数据在第"<
#include
using namespace std;
typedef struct list
{
double elem[100];
int
}list;
length;
int init_list(list&l)//初始化函数
{
int search(int low,int high,list&l);
int n=0;
ifstream infile;
cout<<"请输入数据(必须是从小到大排序的)"<
>l.elem[n])//从文件中输入已排序数组,直到文件中无数据读取
n++;
infile.close();
l.length=n;
for(int i=0;il.elem[i+1])
{
outfile<<"朋友请不要玩我!"<double key;
cout<<"请输入查找数据"<
>key;
while(low五、程序测试及分析
1、数据输入:由文件 input.txt 给出输入数据。例如:
2、结果输出:将计算的××××××结果输出到文件 output.txt 中。例如:
六、总结
用分治法解问题要注意以下的三点:
(1) 该问题的规模缩小到一定的程度就可以容易地解决
(2) 该问题可以分解为若干个规模较小且相互独立的相同问题,即该问题
具有最优子结构性质。
(3) 利用该问题分解出的子问题的解可以合并为该问题的解;
七、导教师评语及成绩:
评语:
成绩:
指导教师签名:
批阅日期: