- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
电 子 科 技 大 学
实 验 报 告
课程名称: 数据结构与算法
学生姓名:
学 号:
点名序号:
指导老师:
试验地点: 基础试验大楼
试验时间: 5月20日
--2学期
信息与软件工程学院
实 验 报 告(二)
学生姓名 学 号: 指导老师:
试验地点: 基础试验大楼 试验时间: 5月20日
一、 试验室名称: 软件试验室
二、 试验项目名称: 数据结构与算法—排序与查找
三、 试验课时: 4
四、 试验原理:
快速排序基础思想是: 经过一躺排序将要排序数据分割成独立两部分, 其中一部分全部数据都比另外一不部分全部数据都要小, 然后再按次方法对这两部分数据分别进行快速排序, 整个排序过程能够递归进行, 以此达成整个数据变成有序序列。
假设要排序数组是A[1]……A[N], 首先任意选择一个数据(通常选择第一个数据)作为关键数据, 然后将全部比它数都放到它前面, 全部比它大数都放到它后面, 这个过程称为一躺快速排序。一躺快速排序算法是:
1)设置两个变量I、 J, 排序开始时候I: =1, J: =N
2)以第一个数组元素作为关键数据, 赋值给X, 即X: =A[1];
3)从J开始向前搜索, 即(J: =J-1), 找到第一个小于X值, 二者交换;
4)从I开始向后搜索, 即(I: =I+1), 找到第一个大于X值, 二者交换;
5)反复第3、 4步, 直到I=J。
二分法查找(折半查找)基础思想:
(1)确定该区间中点位置: mid=(low+high)/2????
min代表区间中间结点位置, low代表区间最左结点位置, high代表区间最右结点位置
(2)将待查a值与结点mid关键字(下面用R[mid].key)比较, 若相等, 则查找成功, 不然确定新查找区间:
A)假如R[mid].keya, 则由表有序性可知, R[mid].key右侧值都大于a, 所以等于a关键字假如存在, 肯定在R[mid].key左边表中,这时high=mid-1;
B)假如R[mid].keya,则等于a关键字假如存在, 肯定在R[mid].key右边表中。这时low=mid;
C)假如R[mid].key=a, 则查找成功。
(3)下一次查找针对新查找区间, 反复步骤(1)和(2)
(4)在查找过程中, low逐步增加, high逐步降低, 假如highlow, 则查找失败。
五、 试验目:
本试验经过实现快速排序和折半查找算法, 使学生了解怎样实现快速查找和排序基础算法思想。经过练习, 加强对算法了解, 提升编程能力。
六、 试验内容:
(1)实现数据序列输入;
(2)实现快速排序算法,并对输入序列排序后输出;
(3)实现折半查找算法,并在步骤(2)排序后序列上,进行任意地
查找,并输出查询结果。
七、 试验器材(设备、 元器件):
PC机一台, 装有C语言集成开发环境。
八、 数据结构与程序:
#includestdio.h
#includestdlib.h
#define MAX 1000
#define FROMFILE 1
typedef struct JD{
int key;
}JD;
int binsrch(JD r[],int n,int k)
{ int low,high,mid,found;
low=1; high=n; found=0;
while((low=high)(found==0))
{ mid=(low+high)/2;
if(kr[mid].key) low=mid+1;
else if(k==r[mid].key) found=1;
else high=mid-1;
}
if(found==1)
return(mid);
else
return(0);
}
void quicksort(JD r[],int low,int high){
int i,j,k;
JD x;
if(low=hig
文档评论(0)