查找排序的应用 实验报告.docx
《查找排序的应用 实验报告.docx》由会员分享,可在线阅读,更多相关《查找排序的应用 实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
查找排序的应用实验报告
实验七查找、排序的应用
一、实验目的
1、本实验可以使学生更进一步巩固各种查找和排序的基本知识。
2、学会比较各种排序与查找算法的优劣。
3、学会针对所给问题选用最适合的算法。
4、掌握利用常用的排序与选择算法的思想来解决一般问题的方法和技巧。
二、实验内容
[问题描述]
对学生的基本信息进行管理。
[基本要求]
设计一个学生信息管理系统,学生对象至少要包含:
学号、姓名、性别、成绩1、成绩2、总成绩等信息。
要求实现以下功能:
1.总成绩要求自动计算;
2.查询:
分别给定学生学号、姓名、性别,能够查找到学生的基本信息(要求至少用两种查找算法实现);
3.排序:
分别按学生的学号、成绩1、成绩2、总成绩进行排序(要求至少用两种排序算法实现)。
[测试数据]
由学生依据软件工程的测试技术自己确定。
三、实验前的准备工作
1、掌握哈希表的定义,哈希函数的构造方法。
2、掌握一些常用的查找方法。
1、掌握几种常用的排序方法。
2、掌握直接排序方法。
四、实验报告要求
1、实验报告要按照实验报告格式规范书写。
2、实验上要写出多批测试数据的运行结果。
3、结合运行结果,对程序进行分析。
五、算法设计
a、折半查找
设表长为n,low、high和mid分别指向待查元素所在区间的下界、上界和中点,key为给定值。
初始时,令low=1,high=n,mid=(low+high)/2,让key与mid指向的记录比较,
若key==r[mid].key,查找成功
若key若key>r[mid].key,则low=mid+1
重复上述操作,直至low>high时,查找失败
b、顺序查找
从表的一端开始逐个进行记录的关键字和给定值的比较。
在这里从表尾开始并把下标为0的作为哨兵。
voidchaxun(SqList&ST)uehao<[j-1].xuehao)
{
LI=[j];
[j]=[j-1];
[j-1]=LI;
}
inta=0;
cout<<"输入要查找的学号"<cin>>n;
intlow,high,mid;
low=0;high=;uehao)
{
cout<<[mid].xuehao<<""<<[mid].xingming<<""<<[mid].xingbei<<""<<[mid].chengji1<<""<<[mid].chengji2<<""<<[mid].zong<a=1;
break;
}
elseif(n<[mid].xuehao)
high=mid-1;ingming)
{
cout<<[i].xuehao<<""<<[i].xingming<<""<<[i].xingbei<<""<<[i].chengji1<<""<<[i].chengji2<<""<<[i].zong<a=1;
}
1、插入排序
每步将一个待排序的记录,按其关键码大小,插入到前面已经排好序的一组记录的适当位置上,直到记录全部插入为止。
uehao<[j-1].xuehao)
{
LI=[j];
[j]=[j-1];
[j-1]=LI;}
2、选择排序
首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换
再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个记录交换
重复上述操作,共进行n-1趟排序后,排序结束。
hengji1>[j].chengji1)
{LI=[j];
[j]=[i];
[i]=LI;
六、运行测试结果
输入学生信息
以多种方式进行查找
按总成绩进行排序
六、实验总结
通过本次实验我对查找排序的应用有了一定得了解,知道了各种查找排序的基本知识。
同时,通过自己数次的调试、修改也搞懂了许多以前比较模糊的知识点,比如这次的界面是复制过来的,其中很多语句经过同学的讲解都理解了。
但这次实验也有很多不尽人意的地方,我将在以后多学习同学优秀的地方.也会在以后的学习过程中要尽量考虑周全,使程序更有实用价值,提高编程能力。
七、源代码
#include
usingnamespacestd;
#include
#defineMAXSIZE100uehao;
cout<<"姓名"<cin>>[i].xingming;
cout<<"性别"<cin>>[i].xingbei;
cout<<"成绩1"<cin>>[i].chengji1;
cout<<"成绩2"<cin>>[i].chengji2;
}
cout<<"输入完毕"<}
voidzong(SqList&ST)ong=[i].chengji1+[i].chengji2;
}
}
voidshuchu(SqList&ST)uehao<<""<<[i].xingming<<""<<[i].xingbei<<""<<[i].chengji1<<""<<[i].chengji2<<""<<[i].zong<<""<}
}
voidchaxun(SqList&ST)uehao<[j-1].xuehao)
{
LI=[j];
[j]=[j-1];
[j-1]=LI;
}
l2:
inta=0;
cout<<"输入要查找的学号"<cin>>n;
intlow,high,mid;
low=0;high=;uehao)
{
cout<<[mid].xuehao<<""<<[mid].xingming<<""<<[mid].xingbei<<""<<[mid].chengji1<<""<<[mid].chengji2<<""<<[mid].zong<a=1;
break;
}
elseif(n<[mid].xuehao)
high=mid-1;ingming)
{
cout<<[i].xuehao<<""<<[i].xingming<<""<<[i].xingbei<<""<<[i].chengji1<<""<<[i].chengji2<<""<<[i].zong<a=1;
}
}
if(!
a)
{
cout<<"所查信息不存在!
"<cout<<"请重新输入"<gotol3;
}
gotol1;
}
if(m==3)ingbei)
{
cout<<[i].xuehao<<""<<[i].xingming<<""<<[i].xingbei<<""<<[i].chengji1<<""<<[i].chengji2<<""<<[i].zong<a=1;
}
}
if(!
a)
{
cout<<"所查信息不存在!
"<cout<<"请重新输入"<gotol4;
}
gotol1;
}
if(m==4)
{
caidan(ST);
}
}
voidpaixu(SqList&ST)uehao<[j-1].xuehao)
{
LI=[j];
[j]=[j-1];
[j-1]=LI;
}
shuchu(ST);
cout<<"排序完毕"<gotol1;
}
if(n==2)hengji1>[j].chengji1)
{
LI=[j];
[j]=[i];
[i]=LI;
}
}
shuchu(ST);
cout<<"排序完毕"<gotol1;
}
if(n==3)hengji2>[j].chengji2)
{
LI=[j];
[j]=[i];
[i]=LI;
}
}
shuchu(ST);
cout<<"排序完毕"<gotol1;
}
if(n==4)ong>[j].zong)
{
LI=[j];
[j]=[i];
[i]=LI;
}
}
shuchu(ST);
cout<<"排序完毕"<gotol1;
}
if(n==5)//退出
{
caidan(ST);
}
}
voidcaidan(SqList&ST)//选择菜单
{
cout<<"请选择要进入的模块"<cout<<"
(1)查询"<cout<<"
(2)排序"<cout<<"(3)退出"<intc;
cin>>c;
if(c==1)
{
chaxun(ST);
}
if(c==2)
{
paixu(ST);
}
if(c==3)
{
exit(0);
}
}
voidmain()
{
SqListST;
CreatList(ST);
zong(ST);
shuchu(ST);
caidan(ST);
}