2023年查找排序的应用实验报告_第1页
2023年查找排序的应用实验报告_第2页
2023年查找排序的应用实验报告_第3页
2023年查找排序的应用实验报告_第4页
2023年查找排序的应用实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验七查找、排序的应用一、实验目的1、本实验可以使学生更进一步巩固各种查找和排序的基本知识。2、学会比较各种排序与查找算法的优劣。3、学会针对所给问题选用最适合的算法。4、掌握运用常用的排序与选择算法的思想来解决一般问题的方法和技巧。二、实验内容[问题描述]对学生的基本信息进行管理。[基本规定]设计一个学生信息管理系统,学生对象至少要包含:学号、姓名、性别、成绩1、成绩2、总成绩等信息。规定实现以下功能:.总成绩规定自动计算;.查询:分别给定学生学号、姓名、性别,可以查找到学生的基本信息(规定至少用两种查找算法实现);.排序:分别按学生的学号、成绩1、成绩2、总成绩进行排序(规定至少用两种排序算法实现)。[测试数据]由学生依据软件工程的测试技术自己拟定。voidCreatList(SqList&ST)〃创建学生的相关信息coutV<〃输入学生个数"<<endl;。cin>>ST.length;ofor(inti=0;i<ST.length;i++)(coutV<"输入第"<<i+1<<〃学生的信息”<<endl;cout<<〃学号”d1;cin»ST.r[i].xuehao;cou〃姓名〃《endl;«»cin>>ST.r[i].xingming;acout<<"性别"V<endl;ocin>>ST.r[i].xingbei;coutV<"成绩r\<end1;cin»ST.r[i].chengji1;cout«成绩2z,<<endl;cin>>ST.r[i].chengji2;)ocout<<〃输入完毕"«endl;)voidzong(SqList&ST)〃计算总分

for(inti=0;i<ST.length;i++)。ST.r[i].zong=ST.r[i].chengjil+ST.r[i].chengji2;。})voidshuchu(SqList&ST)//输出{0cout<〈〃学生的信息如下«end1;cout«"学号姓名性别成绩1成绩2总分“VVendl;for(inti=0;i<ST.1ength;i++)(cout<<ST.r[i].xuehao<<?,”<<ST.r[i].xingming<<"/Z«ST.r[i].xingbei<<,z"«ST.r[i].chengjilV<〃Z,Z,<<ST.r[i].Z,<<ST.r[i].chengji2«Z,<<ST.r[i].chengji2«/z“K〈ST.r[i].zong<<zz/z<<end1;voidchaxunvoidchaxunvoidchaxun(SqList&ST)//voidchaxun(SqList&ST)//查询信息11:acout«end1;cout久〃(1)根据学号查询”“endl;coutvv(2)根据姓名查询”<<end1;ocout«z,(3)根据性别查询〃。end1;cout«,z(4)退出"<<endl;intn,m;stringname;stringxb;cin>>m;®if(m=二1)//折半查找6{oRecordTypeLI;〃使学号变为有序近oMinti=1;i<ST.length;i++)®for(intj=i;j>=l;j)。if(ST.r[j].xuehao<ST.r[j-1].xuehao)(gLI=ST.r[j];。ST.r[j]=ST.r[j-l];ooST.r[j-1]=LI;o}12:inta=0;cout«"输入要查找的学号«endl;cin»n;。int1ow,high,mid;//置区间初值ow=0;//置区间初值while(1ow<=high)(oomid=(low+high)/2;。if(n==ST.r[mid].xuehao)g{cout<<ST.r[mid].xuehao«""<<ST.r[mid].xingming<<z/Z,«ST.r[mid].xingbei<</zZ,<<ST.r[mid].chengji1<<Z,z,<<ST.r[mid].chengji2<<"”<XST.r[mid].zong<<endl;°a=1;obreak;0)oelseif(n<ST.r[mid].xuehao)ohigh=mid-l;//继续在前半区间进行查找e1se。low=mid+1;//继续在后半区间进行查找。}oif(!a)(coutV〈〃所查信息不存在!〃VVendl;cout<〈"请重新输入Vend1;goto12;if(m==2)//顺序查找(13:inta=0;cout。〃输入耍查找的姓名〃<Vendl;cin»name;for(inti=0;i<ST.length;i++)0{if(name==ST.r[i].xingming)•(cout<<ST.r[i].xuehao«z/"<<ST.r[i].xingming<<"Z,«ST.r[i].xingbei«z/,Z<<ST.r[i].chengjil«z,Z/<<ST.r.chengji2<<z,,Z<<ST.r[i].zong<<endl;°a=1;00}}。if(!a)°{8cout<<〃所查信息不存在!"«end1;cout«"请重新输入"v<end1;goto13;。}goto11;}if(m==3)//顺序查找(14:ointa=0;coutV<〃输入要查找性别”〈Vendl;cin>>xb;。for(inti=0;i<ST.length;i++)°(oif(xb==ST.r[i].xingbei)»(cout<<ST.r[i].xuehao<<"/z«ST.r[i].xingming<<?/"<<ST.r[i].xingbei<</z,Z<<ST.r[i].chengjil«/,"V<ST.r[i].chengji2<<z,,,<<ST.r[i].zong<<end1;a=l;)}f(!a)coutvv〃所查信息不存在!〃<Xendl;。cout«”请重新输入〃V<endl;ggoto14;0)0goto11;)if(m==4){®caidan(ST);})voidpaixu(SqList&ST)//排序(:intn;cout«end1;ocout<V〃(l)根据学号排序〃<<end1;cout<V〃(2)根据成绩l排序"<<endl;ocout«,z(3)根据成绩2排序〃<<endl;Cout<<〃⑷根据总成绩排序“<<end1;coutVV"(5)退出”;cout«end1;cin>>n;if(n==l)〃按学号排序,使用插入排序。RecordTypeLI;//定义存储学号向量for(inti=l;i<ST.1ength;i++)g「or(intj=i;j>=l;j)if(ST.r[j].xuehao<ST.r[j-l].xuehao)。(oLI=ST.r[j];。ST.r[j]=ST.r[j-1];gST.r[j-l]=LI;力shuchu(ST);ocout排序完毕〃V〈endl;0t011;oif(n==2)//按成绩1排序,用选择排序3.oRecordTypeLI;gfor(inti=0;i<ST.1ength;i++)for(intj=i+1;j<ST.1ength;j++)

dOOif(ST.r[i].chengjil>ST.r[j].chengjil)dOO000{-LI=ST.r[j];°ST.r[j]=ST.r[i];8aST.r[i]=LI;a010shuchu(ST);outV〈"排序完毕”<Xendl;。goto11;。},if(n=3)//根据成绩2排序,使用选择法排序(oRecordTypeLI;&for(inti=0;i<ST.length;i++)ofor(intj=i+l;j<ST.Iength;j++)00I/if(ST.r[i].chengji2>ST.r[j].chengji2)000j0wLI=ST.r[j];-ST.r[j]=ST.r[i];ooST.rEi]=LI;oshuchu(ST);。cout<V〃排序完毕〃<Vendl;goto11;。}if(n=4)〃根据总成绩排序,使用选择法排序{gRecordTypeLI;。for(inti=0;i<ST.length;i++)oofor(intj=i+l;j<ST.1ength;j++)8(0if(ST.r[i].zong>ST.r[j].zong)。(。。LI=ST.rLj];。ST.rEJ]=ST.r[i];qST.r[i]=LI;°}3shuchu(ST);三、实验前的准备工作1、掌握哈希表的定义,哈希函数的构造方法。2、掌握一些常用的查找方法。1、掌握几种常用的排序方法。2、掌握直接排序方法。四、实验报告规定1、实验报告要按照实验报告格式规范书写。2、实验上要写出多批测试数据的运营结果。3、结合运营结果,对程序进行分析。五、算法设计a、折半查找设表长为n,1ow、high和mid分别指向待查元素所在区间的下界、上界和中点,key为给定值。初始时,令low=1,high=n,inid=(low+high)/2,让key与mid指向的记录比较,若key二二r[mid].key,查找成功若key〈r[mid].key,则high=mid-1若key>r[mid].key,则low=mid+1反复上述操作,直至1ow>high时,查找失败b、顺序查找youtX〈〃排序完毕“〈〈end1;®goto11;°!oif(n==5)//退出°{ocaidan(ST);。})voidcaidan(SqList&ST)//选择菜单{®cout«"请选择要进入的模块"<<endl;®cout«”(l)查询"«endl;cout«z,(2)排序“<<endl;cout«/,(3)退出〃<<endl;intc;cin»c;if(c==l)«>chaxun(ST);°}4f(c==2)paixu(ST);)if(c==3)(o®exit(0);))voidmain()(SqListST;oCreatList(ST);zong(ST);oshuchu(ST);caidan(ST);从表的一端开始逐个进行记录的关键字和给定值的比较。在这里从表尾开始并把下标为0的作为哨兵。voidchaxun(SqList&ST)//查询信息cout〈〈〃\n************************〃VVendl;cout«(1)根据学号查询〜〃VVendl;笛o(2)根据姓名查询〜〃<Vend1;,cout*”〜(3)根据性别查询~〃*endl;0cout<〈八(4)退出^z,<<endl;cout<<"************************”<<endl;if(m==l)折半查找算法:for(inti=l;i<ST.length;i++)〃使学号变为有序for(intj=i;j>=l;j—)if(ST.rLj].xuehao<ST.r[j-1].xuehao)ooLI=ST.r[j];6T.rLj]=ST.r[j-l];3ST.r[j-1]=LI;°)ointa=0;ocoutv〈〃输入要查找的学号〃。endl;cin>>n;int1ow,high,mid;ow=0;high=ST.1ength-1;//置区间初值owhile(1ow<=high)amid=(1ow+high)/2;if(n==ST.r[mid].xuehao)6(cout«ST.r[mid].xuehao<<z,Z,<<ST.r[mid].xingming«M"«ST.r[mid].xingbei<<n〃<VST.r[mid].chengjil<<,z",<<ST.r[mid].chengji2<<"〃<VST.r[mid].zong<<end1;小1=1;ebreak;g}elseif(n<ST.r[mid].xuehao)。high=mid-1;//继续在前半区间进行查找1se//继续在后半区间进行查找顺序查找算法:cout<V”输入要查找的姓名〃<<end1;。cin>>name;for(inti=0;i<ST.1ength;i++){°if(name==ST.r[i].xingming)b{cout<<ST.r[i].xuehao«z,"<<ST.r[i].xingming«,/n«ST.r[i].xingbei«n〃V<ST.r[i].chengjil<<z,"<<ST.r[i].chengji2«''*<<ST.r[i].zong<<endl;°a=l;a}1、插入排序每步将一个待排序的记录,按其关键码大小,插入到前面已经排好序的一组记录的适当位置上,直到记录所有插入为止。//按学号排序,使用插入排序-RecordTypeLI;〃定义存储学号向量or(inti=l;i<ST.length;i++)for(intj=i;j>=l;j—)(ST.r[j].xuehao<ST.r[j-1].xuehao)l-LI=ST.r[j];-ST.r[j]=ST.r[j-1];oST.r[j-l]=LI;}2、选择排序一方面通过n—1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录互换再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个记录互换反复上述操作,共进行n—1趟排序后,排序结束。//按成绩1排序,用选择排序«>RecordTypeLI;for(inti=0;i<ST.1ength;i++)for(intj=i+1;j<ST.length;j++)®{if(ST.rEi],chengjil>ST.r[j].chengjil)a。{LI=ST.r[j];3ST.r[j]=ST.r[i];00六、运营测试结果输入学生信息a超楼心第1学生的信息学号3名zed性别成绩1褊2学车的宿息如下季号姓名,性别成绩1成绩2总分1zed99991982eue女89961853noc.■*a■■aaa、■■,男9095185请选择要进入的模块〈1)查询<2〉喈亭<3)退出以多种方式进行查找〈2〉根据姓名查询〈3地嘱性剌查询<4〉退出3输入要查找性别男1zed男99991983noc男9095185

询询询普香香-姓性询询询普香香-姓性根〔根〔根封〔_>>>>1234<<<<2询询询好香番号俞

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论