ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:46.02KB ,
资源ID:22136460      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22136460.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(快速排序与二分查找文档格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

快速排序与二分查找文档格式.docx

1、基础实验大楼 A508 实验时间:一、 实验室名称:软件实验室二、 实验项目名称:数据结构与算法一快速排序与二分查找三、 实验学时:4四、 实验原理:快速排序的基本思想是:通过一躺排序将要 排序的数据分割成独立的两部分,其中一部分的 所有数据都比另外一不部分的所有数据都要小, 然后再按次方法对这两部分数据分别进行快速 排序,整个排序过程可以递归进行,以此达到整 个数据变成有序序列。假设要排序的数组是A1AN,首先 任意选取一个数据(通常选用第一个数据)作为 关键数据,然后将所有比它的数都放到它前面, 所有比它大的数都放到它后面,这个过程称为一 躺快速排序。一躺快速排序的算法是:1)设置两个变量

2、I、J,排序开始的时候I : =1,J : =N2) 以第一个数组元素作为关键数据,赋值给 X,即 X: =A1;3) 从J开始向前搜索,即(J : =J-1),找到 第一个小于X的值,两者交换;4) 从I开始向后搜索,即(I: =1+1),找到 第一个大于X的值,两者交换;5) 重复第3、4步,直到I=J。二分法查找(折半查找)的基本思想:(1) 确定该区间的中点位置:mid=(low+high ) /2min代表区间中间的结点的位置,low代表区间 最左结点位置,high代表区间最右结点位置(2) 将待查a值与结点mid的关键字(下面 用Rmid.key )比较,若相等,则查找成功,否 则

3、确定新的查找区间:A) 如果Rmid.keya,则由表的有序性可 知,Rmid.key右侧的值都大于a,所以等于a 的关键字如果存在,必然在 Rmid.key左边的 表中,这时high=mid-1;B) 如果Rmid.keya,则等于a的关键字如 果存在,必然在 Rmid.key右边的表中。这时 low=mid ;C)如果Rmid.key=a,则查找成功。(3) 下一次查找针对新的查找区间, 重复步 骤(1)和(2)(4) 在查找过程中,low逐步增加,high逐 步减少,如果highlow,则查找失败。五、 实验目的:本实验通过实现快速排序和折半查找算法,使学生理解如何实现快速查找和排序的基

4、本算法思想。通过练习,加强对算法的理解,提高编程能力。六、 实验内容:(1) 实现数据序列的输入;(2) 实现快速排序算法,并对输入的序列排序后输出;(3) 实现折半查找算法,并在步骤(2)排序后的序列上,进行任意地 查找,并输出查询结果。七、 实验器材(设备、元器件):PC机一台,装有C/C+语言集成开发环境。八、数据结构及程序/* 陈 家 浩*#include#define MAX 100int DataMAX+1 = 0;intQuick_Part(intData,inti,int j);/一趟排序Quick_Sort(ints,int t);/递归排Quick_Find(intdata

5、,intn);/二分查找int main(void)Iint choose = -1 int i,k,data; / 选择功能int n; /数据序列长度while(1)printf(+ 排序与查找 - +n|1:输入数据序列|n2:序列排序3:查找信息0:退出+ + +n 请选择: ); scanf(%d,&choose);switch(choose)case 1: 请输入序列数据个数:scanf(if(nMAX) 数据过多 !nn break;else 请输入数据序列: nfor(i = 1;i = n;i+) scanf(Datai); 读取成功! nnbreak;case 2:Quic

6、k_Sort(Data,1,n); / 快速排序 排序成功!序列如下: for(i = 1;i+)%d ,Datai); printf(case 3: 请输入待查找的数据:data);k = Quick_Find(Data,data,n); / 二分法查找if(k) 查找成功!数据 %d 位于序 列第 %d 位。,data,k);else 查找失败!没有你要查找的数 据! default:return 0;int Quick_Part(int Data,int i,int j) / 快速排序Data0 = Datai;while(i j)while(i j) & (Data0 = Dataj)

7、j -; / 右边目标元比划分元大, j 往左移if(i Datai = Dataj; /比划分元小的关键 字交换到左边i +; while(i = Datai) / 左边目标元比划分元小, i 往右移Dataj = Datai; /比划分元大的关键 字交换到右边Datai = Data0; / 划分元存入正/返回划分元确位置return i;的位置int Quick_Sort(int Data,int s,int t)int i = Quick_Part(Data,s,t); / 调用划分过程 将顺序表分成两部分if(is)Quick_Sort(Data,s,i-1); /递归调用排序if(

8、it)Quick_Sort(Data,i+1,t); / 递归调用排序/二分查int Quick_Find(int Data,int data,int n) 找int low = 1; int high = n;int mid;/中间位置/查找成功返回while(low Datamid) low = mid +1;high = mid -1;II查找失败返回0九、程序运行结果:十、实验结论:通过实现快速排序和折半查找算法, 基本达到了实验目的。快速排序的基本 思想是每次确定一个划分元,将比划分元大的数据存储到划分元右边,比他小 的存储到他左边,通过递归排序实现整个顺序表的排序。然而,其中的递归调 用很难,需要思考其中参数的变化,这需要细心。十一、总结及心得体会:1对错误输入的解决方案还有待完善;2快速排序递归调用结束的条件需要慎重考虑,否则极易陷入死循环。例 如课本上的while(svt)结束条件,第一次递归的s,t根本不会发生改变,以至于 程序进入了死循环;3、 顺序表的存储方式可以有多种, 这里为了方便采用了整形数组方式存储, 当然也可以用结构数组来存储;4、 函数的返回值作用很大,要仔细决定;5、 实验虽然简单,淡水在以后的各个方面都会用到,所以应仔细完成,深 刻理解内容。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1