二分搜索算法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二分搜索算法实验报告
篇一:实验报告2--二分搜索技术
注意:红色的部分需要用自己的代码或内容进行替换。
湖南涉外经济学院
实验报告
实验课程:算法设计与分析
实验项目:二分搜索技术
学院专业
实验地点分组组号实验时间 XX年 3 月 10 日星期一第 12节
指导老师
【实验目的和要求】
1. 理解分治法的原理和设计思想;
2.要求实现二分搜索算法;
3.要求交互输入一组关键字序列,输入需要查找的关键字;
4. 要求显示结果。
【系统环境】
操作系统:Windows XP 操作系统
开发工具:VC++6.0英文企业版
开发语言:C,C++
【实验原理】
1、问题描述
给定已排好序的n个元素a[0…n-1],现要在这n个元素中找出一特定元素x。
2、实验原理
二分搜索方法充分利用了元素间的次序关系(但也局限于此),采用分治策略,将n个元素分成个数大致相同的两半,取a[n/2]与x进行比较。
如果x=a[n/2],则找到x,算法终止。
如果xa[n/2],则只要在数组a的右半部继续搜索x。
【实验任务与步骤】
1、实验步骤(可以根据自己的程序修改)
(1) 实现顺序搜索。
(2) 实现二分搜索算法的递归算法。
(3) 实现二分搜索算法的非递归算法。
(4) 编写主函数,调用所写的三个算法进行测试,并进行输出。
2、源程序代码
// 此处为解决问题的完整源程序,要求带注释,代码必须符合书写规范。
(1) 顺序搜索
(2) 递归的二分搜索
(3) 非递归的二分搜索(原文来自:小草范文网:
二分搜索算法实验报告)
……
【实验结论(包括实验数据处理、问题与解决办法、心得体会、意见与建议等)】
// 此处为程序运行的结果,要求有程序运行输入输出实例,要求至少有两组实验结果。
// 必须写心得体会、意见与建议等,或者遇到的问题、难题等。
……
篇二:查找排序实验报告
实验十:查找、排序
计算机学院 12级2班 12110XX 李龙
实验目的:
1.掌握折半查找算法的思想。
2.实现折半查找的算法。
3.掌握常见的排序算法(插入排序、交换排序、选择排序等)的思想、特点及其适用条件。
4.能够分析各种算法的效率。
5.熟练的掌常见的排序算法的程序步骤。
实验内容:
1.建立一静态有序表。
2.用一个函数实现折半查找算法。
3.在主函数中输入一组数据,测试算法的正确性。
4. 按照快速排序思想实现快速排序算法。
5. 在主函数中输入一段数据,测试算法的正确性。
设计思路:
开始的时候提示输入一组数据。
并存入一维数组中,接下来调用一系列查找算法对其进行处理。
顺序查找只是从头到尾进行遍历。
二分查找则是先对数据进行排序,然后利用三个标志,分别指向最大,中间和最小数据,接下来根据待查找数据和中间数据的比较不断移动标志,直至找到。
二叉排序树则是先构造,构造部分花费最多的精力,比根节点数据大的结点放入根节点的右子树,比根节点数据小的放入根节点的左子树,其实完全可以利用递归实现,这里使用的循环来实现的,感觉这里可以尝试用递归。
当二叉树建好后,中序遍历序列即为由小到大的有序序列,查找次数不会超过二叉树的深度。
这里还使用了广义表输出二叉树,以使得更直观。
哈希表则是利用给定的函数式建立索引,方便查找总体设计:
静态表的存储结构
typedef struct
{
int *elem;
int length;
}sstable;
void CreateData(int data[],int length);//为一个数组赋值
//此函数是折半查找函数。
其中data是所查寻的数组,length是数组的长度。
x是所要查找的数,返回的值是数据x在数组中的位置
intBisearch(int data[],int x,int begin,int last);//折半查找函数,使用过程中只需要给出数组名字,要查找的数值x,数组的起始位置begin及末位置即可。
void PrintData(int data[],int length);//输出一个数组的所有元素。
定义void quickSort(int *arr,int l,int r)函数实验结果:
输入查找数字:7 如上图
查找--得出结果
排序--得出结果
实验总结:
本次实验程序结构比较简单,无需复杂的函数调用。
但是由于本人编程基础不够扎实,在面对需要很多数组声明和调用的时候,经常弄错,在编译的过程中出现了很多次内存调用出错的情况。
后来发现是二维数组的定义上没有做好,引入了动态定义的方法解决了这一问题。
通过本次实验,加深了我对查找表的认识。
但是,实验
中也出现了问题,程序循环不能良好退出。
希望经过以后的学习我能解决这些问题。
代码:查找代码---见附表1
排序代码—见附表2
篇三:数据结构实验报告实验五查找算法
昆明理工大学信息工程与自动化学院学生实验报告
( 201 —201 学年第一学期)
课程名称:数据结构开课实验室:年月日
一.实验内容:
查找算法,其中线性表的查找包括顺序查找,二分查找,分块查找;树表的查找包括二叉排序树等;还有散列表的查找等等。
二.实验目的:
1.掌握各种查找算法理解和实现;
2.增强上机编程调试能力;
三.主要程序代码分析:
typedef struct
{
int Key; //关键项
}ElemType;
int Search_Seq(SSTable ST,int Key) //顺序查找
{
int i;
ST.elem[0].Key=Key; //设置监视哨
for(i=ST.length;ST.elem[i].Key!=Key;i--);
return i;
}
int Search_Bin(SSTable ST,int Key)//在有序表中进行二分查找
{
int low=1;
int high=ST.length; //置查找区间的上、下届初值int mid;
count=0;
while(low {
count++;
mid=(low+high)/2;
if(ST.elem[mid].Key==Key)
return mid; //查找成功,返回
else if(Key high=mid-1; //缩小查找区间为左子表
else
low=mid+1;//缩小查找区间为右子表
}
return (-1); //查找失败
}
四.程序运行结果:
五.实验总结:
查找又称检索,它也是数据处理中经常使用的一种重要的运算,在线性表上的查找方法有顺序查找,二分查找和分块查找。
顺序查找是一种最简单的查找方法。
它的基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键字和定值K相比较,若当前扫描到的结点关键字与K 相等,则查找成功;若扫描结束后仍未找到关键字等于K的结点,则查找失败。
对于二分查找,它要求线性表是有序表,并且要用向量作为表的存储结构。
我们在以后的学习中也要不断地熟悉这些查找方法,因为它们在数据处理中会经常用到,只有将它们掌握好,而且我们还要不断地练习,这样我们的编程能力才会提高,有更大的进步。