实验6 查找和排序 21.docx
- 文档编号:26983700
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:13
- 大小:118.30KB
实验6 查找和排序 21.docx
《实验6 查找和排序 21.docx》由会员分享,可在线阅读,更多相关《实验6 查找和排序 21.docx(13页珍藏版)》请在冰豆网上搜索。
实验6查找和排序21
实验六、七:
查找、排序算法的应用
班级10511学号20103051114姓名高卫娜
一、实验目的
1掌握查找的不同方法,并能用高级语言实现查找算法。
2熟练掌握顺序表和有序表的顺序查找和二分查找方法。
3掌握排序的不同方法,并能用高级语言实现排序算法。
4熟练掌握顺序表的选择排序、冒泡排序和直接插入排序算法的实现。
二、实验内容
1创建给定的顺序表。
表中共包含八条学生信息,信息如下:
学号姓名班级C++数据结构
1王立035118576
2张秋035117888
3刘丽035119079
4王通035117586
5赵阳035116071
6李艳035115868
7钱娜035119589
8孙胜035114560
2使用顺序查找方法,从查找表中查找姓名为赵阳和王夏的学生。
如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。
3使用二分查找方法,从查找表中查找学号为7和12的学生。
如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。
(注意:
创建静态查找表时必须按学号的从小到大排列!
)
4使用直接插入排序方法,对学生信息中的姓名进行排序。
输出排序前和排序后的学生信息表,验证排序结果。
5使用直接选择排序方法,对学生信息中的C成绩进行排序。
输出排序前和排序后的学生信息表,验证排序结果。
6使用冒泡排序方法,对学生信息中的数据结构成绩进行排序。
输出排序前和排序后的学生信息表,验证排序结果。
7编写一个主函数,将上面函数连在一起,构成一个完整程序。
8将实验源程序调试并运行。
三、实验结果
源程序代码为:
#include
#include
#include
#defineMAXSIZE10
typedefcharKeyType1;
typedefintKeyType2;
typedefstruct
{
//学号姓名班级C++数据结构
KeyType1name[20];
KeyType2xuehao;
KeyType1Class[20];
doublescore[2];
}DataType;
typedefstruct
{
DataTypedata[MAXSIZE+1];
intlen;
}SeqList;
//顺序表的创建
voidcreate(SeqList&L)
{
cout<<"请输入顺序表的大小:
"< cin>>L.len; cout<<"请输入顺序表中八条学生信息(学号姓名班级C++数据结构): "< for(inti=1;i<=L.len;i++) { cin>>L.data[i].xuehao; cin>>L.data[i].name; cin>>L.data[i].Class; cin>>L.data[i].score[0]; cin>>L.data[i].score[1]; } } voidInput(SeqList&L) { for(inti=1;i<=L.len;i++) { cin>>L.data[i].xuehao; cin>>L.data[i].name; cin>>L.data[i].Class; cin>>L.data[i].score[0]; cin>>L.data[i].score[1]; } } //顺序表的显示 voidprint(SeqListL) { cout<<"学号姓名班级C++数据结构"< if(L.len==0) { cout<<"该表是空表! "< return; } for(inti=1;i<=L.len;i++) { cout<<""< cout< } } //顺序查找方法从查找表中查找姓名为赵阳和王夏的学生 voidS_Search(SeqListL) { charna[20]; cout<<"请输入要查找的同学的姓名: "< cin>>na; strcpy(L.data[0].name,na);//监视哨 inti=L.len; while(strcmp(L.data[i].name,na)>0||strcmp(L.data[i].name,na)<0) i--; if(i>0) { cout<<"您要查找的学生的信息: "< cout<<""< cout< } if(i<=0) { cout<<"对不起,没有该同学的信息! "< } } //二分查找方法从查找表中查找学号为7和12的学生 //非递归 voidBinary_Search(SeqList&L) { intkx; cout<<"请输入您要查找的学生信息的学号: "< cin>>kx; intlow=1,high=L.len,mid; while(low<=high) { mid=(low+high)/2; if(L.data[mid].xuehao==kx) { cout<<"您要查找的学生的信息: "< cout<<""< cout< break; } elseif(L.data[mid].xuehao>kx) high=mid-1; else low=mid+1; } if(low>high) { cout<<"没有该学号的学生信息! "< } } //直接插入排序方法对顺序表直接插入排序的算法对学生信息中的姓名进行排序: voidInsertSort(SeqList&L) { inti,j; for(i=2;i<=L.len;i++) if(strcmp(L.data[i].name,L.data[i-1].name)<0) { L.data[0]=L.data[i];//复制为哨兵 for(j=i-1;strcmp(L.data[0].name,L.data[j].name)<0;j--) L.data[j+1]=L.data[j];//记录后移 L.data[j+1]=L.data[0];//插入到正确位置 } print(L); } //直接选择排序方法对学生信息中的C成绩进行排序 voidSelectSort(SeqList&L) { inti,j,k; DataTypetemp; for(i=1;i { k=i; for(j=i+1;j<=L.len;j++) if(L.data[j].score[0] k=j; if(k! =i) { temp=L.data[i]; L.data[i]=L.data[k]; L.data[k]=temp; } } print(L); } //冒泡排序方法对学生信息中的数据结构成绩进行排序 voidBubbleSort(SeqList&L) { inti,j,flag=1; DataTypex; for(i=1;((i { flag=0; for(j=1;j if(L.data[j].score[1]>L.data[j+1].score[1]) { x=L.data[j]; L.data[j]=L.data[j+1]; L.data[j+1]=x; flag=1; } } print(L); } voidmain() { SeqListL; inta; cout< while(a! =0) { cout< cout<<"-------------------------欢迎使用学生信息系统----------------------------\n"< cout<<"1: 录入学生信息2: 按姓名查找学生信息 3: 按学号查找学生信息"< cout< cout<<"4: 按姓名排序后学生信息 5: 按c成绩排序学生信息"< cout<<"6: 按数据结构成绩排序后学生信息7: 显示 0: 退出"< cout< cout<<"--------------------------------------------------------------------------"< cout<<"输入您的选择为: "; cin>>a; switch(a) { case1: {create(L);break;} case2: //顺序查找方法从查找表中查找姓名为赵阳和王夏的学生 {S_Search(L);break;} case3: {Binary_Search(L);break;} case4: { cout<<"对学生信息中的姓名进行排序为: "< InsertSort(L); break; } case5: { cout<<"对学生信息中的C成绩进行从低到高排序为: "< SelectSort(L); break; } case6: { cout<<"对学生信息中的数据结构成绩进行从低到高排序为: "< BubbleSort(L); break; } case7: {print(L);break;} case0: exit(0); default: { cout<<"您输入的序号不正确,请重新输入: "< break; } } } } 建立顺序表的运行结果为图1-1: 图1-1录入学生信息 查找的运行结果如图1-2,图1-3: 图1-2按姓名查找 图1-3按学号查询 排序的运行结果如下图1-4,图1-5,图1-6: 图1-4按姓名排序 图1-5按c成绩排序 图1-6按数据结构成绩排序 结束结果如图1-7: 图1-7推出程序 四、实验总结 (1)exit(0)需要头文件#include (2)比较字符串使用头文件# (3)从表的一端开始,向另一端逐个将给定值x与关键码进行比较;使用折半查找的前提: 查找表必须是有序表;在有序表中,取中间元素作为比较对象 (4)直接插入排序是一种稳定的排序方法。 前面的已经是排好序的了找到插入位置即将R[i]插入,原来位置上的记录向后顺移;是一种稳定的排序方法 (5)折半插入排序的时间复杂度仍为O(n2)是一种稳定的排序方法 (6)起泡排序是一个稳定的排序方法;时间复杂度为O(n2)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验6 查找和排序 21 实验 查找 排序