欢迎来到天天文库
浏览记录
ID:21528680
大小:92.50 KB
页数:7页
时间:2018-10-22
《快速排序及二分查找-实验四》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、WORD可编辑文档电子科技大学实验报告课程名称:数据结构与算法学生姓名:陈*浩学号:*************点名序号:***指导教师:钱**实验地点:基础实验大楼A508实验时间:2015.6.32014-2015-2学期信息与软件工程学院技术资料专业分享WORD可编辑文档实验报告(四)学生姓名:陈*浩学号:*************导教师:钱**实验地点:基础实验大楼A508实验时间:2015.6.3一、实验室名称:软件实验室二、实验项目名称:数据结构与算法—快速排序与二分查找三、实验学时:4四、实验原理:快速排序的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部
2、分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一躺快速排序。一躺快速排序的算法是:1)设置两个变量I、J,排序开始的时候I:=1,J:=N2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];3)从J开始向前搜索,即(J:=J-1),找到第一个小于X的值,两者交换;4)从I开始向后搜索,即(I:=I+1),找到第
3、一个大于X的值,两者交换;5)重复第3、4步,直到I=J。二分法查找(折半查找)的基本思想:(1)确定该区间的中点位置:mid=(low+high)/2 min代表区间中间的结点的位置,low代表区间最左结点位置,high代表区间最右结点位置(2)将待查a值与结点mid的关键字(下面用R[mid].key)比较,若相等,则查找成功,否则确定新的查找区间:A)如果R[mid].key>a,则由表的有序性可知,R[mid].key右侧的值都大于a,所以等于a的关键字如果存在,必然在R[mid].key左边的表中,这时high=mid-1;B)如果R[mid].key4、键字如果存在,必然在R[mid].key右边的表中。这时low=mid;C)如果R[mid].key=a,则查找成功。(3)下一次查找针对新的查找区间,重复步骤(1)和(2)(4)在查找过程中,low逐步增加,high逐步减少,如果high5、查找,并输出查询结果。七、实验器材(设备、元器件):PC机一台,装有C/C++语言集成开发环境。八、数据结构及程序/*************************************************************快速查找与二分排序****陈家浩****2015.6.6**********************************************************/#include#defineMAX100intData[MAX+1]={0};intQuick_Part(intData[],inti,intj);//一趟排序6、intQuick_Sort(intData[],ints,intt);//递归排序intQuick_Find(intData[],intdata,intn);//二分查找intmain(void){intchoose=-1;//选择功能inti,k,data;intn;//数据序列长度while(1){printf("+-----排序与查找-----+""7、1:输入数据序列8、""9、2:序列排序10、""11、3:查找信息12、""13、0:退出14、""+-----++++++++++-----+""请选择:");技术资料专业分享WORD可编辑文档scanf("%d",&choos15、e);switch(choose){case1:printf("请输入序列数据个数:");scanf("%d",&n);if(n>MAX){printf("数据过多!");break;}else{printf("请输入数据序列:");for(i=1;i<=n;i++)scanf("%d",&Data[i]);printf("读取成功!");}break;case2:Quick_Sort(Data,1,n);//快速排序pri
4、键字如果存在,必然在R[mid].key右边的表中。这时low=mid;C)如果R[mid].key=a,则查找成功。(3)下一次查找针对新的查找区间,重复步骤(1)和(2)(4)在查找过程中,low逐步增加,high逐步减少,如果high5、查找,并输出查询结果。七、实验器材(设备、元器件):PC机一台,装有C/C++语言集成开发环境。八、数据结构及程序/*************************************************************快速查找与二分排序****陈家浩****2015.6.6**********************************************************/#include#defineMAX100intData[MAX+1]={0};intQuick_Part(intData[],inti,intj);//一趟排序6、intQuick_Sort(intData[],ints,intt);//递归排序intQuick_Find(intData[],intdata,intn);//二分查找intmain(void){intchoose=-1;//选择功能inti,k,data;intn;//数据序列长度while(1){printf("+-----排序与查找-----+""7、1:输入数据序列8、""9、2:序列排序10、""11、3:查找信息12、""13、0:退出14、""+-----++++++++++-----+""请选择:");技术资料专业分享WORD可编辑文档scanf("%d",&choos15、e);switch(choose){case1:printf("请输入序列数据个数:");scanf("%d",&n);if(n>MAX){printf("数据过多!");break;}else{printf("请输入数据序列:");for(i=1;i<=n;i++)scanf("%d",&Data[i]);printf("读取成功!");}break;case2:Quick_Sort(Data,1,n);//快速排序pri
5、查找,并输出查询结果。七、实验器材(设备、元器件):PC机一台,装有C/C++语言集成开发环境。八、数据结构及程序/*************************************************************快速查找与二分排序****陈家浩****2015.6.6**********************************************************/#include#defineMAX100intData[MAX+1]={0};intQuick_Part(intData[],inti,intj);//一趟排序
6、intQuick_Sort(intData[],ints,intt);//递归排序intQuick_Find(intData[],intdata,intn);//二分查找intmain(void){intchoose=-1;//选择功能inti,k,data;intn;//数据序列长度while(1){printf("+-----排序与查找-----+""
7、1:输入数据序列
8、""
9、2:序列排序
10、""
11、3:查找信息
12、""
13、0:退出
14、""+-----++++++++++-----+""请选择:");技术资料专业分享WORD可编辑文档scanf("%d",&choos
15、e);switch(choose){case1:printf("请输入序列数据个数:");scanf("%d",&n);if(n>MAX){printf("数据过多!");break;}else{printf("请输入数据序列:");for(i=1;i<=n;i++)scanf("%d",&Data[i]);printf("读取成功!");}break;case2:Quick_Sort(Data,1,n);//快速排序pri
此文档下载收益归作者所有