查找排序的应用实验报告.docx

上传人:b****5 文档编号:8347654 上传时间:2023-01-30 格式:DOCX 页数:17 大小:36.38KB
下载 相关 举报
查找排序的应用实验报告.docx_第1页
第1页 / 共17页
查找排序的应用实验报告.docx_第2页
第2页 / 共17页
查找排序的应用实验报告.docx_第3页
第3页 / 共17页
查找排序的应用实验报告.docx_第4页
第4页 / 共17页
查找排序的应用实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

查找排序的应用实验报告.docx

《查找排序的应用实验报告.docx》由会员分享,可在线阅读,更多相关《查找排序的应用实验报告.docx(17页珍藏版)》请在冰豆网上搜索。

查找排序的应用实验报告.docx

查找排序的应用实验报告

实验七查找、排序的应用

实验目的

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=

key与mid指向的记录比较,

若key==r[mid].key

若key

若key>r[mid].key

重复上述操作,直至

(low+high)/2,让

b、顺序查找

,查找成功

,贝Uhigh=mid-1

,贝Ulow=mid+1low>high时,查找失败

从表的一端开始逐个进行记录的关键字和给定值的比较。

并把下标为0的作为哨兵。

voidchaxun(SqList&ST)//查询信息

{cout<<"\n************************"<

在这里从表尾开始

cout<<"~

(1)

根据学号查询

~"<

cout<<"~

根据姓名查询

~"<

cout<<"~

根据性别查询

~"<

cout<<"~

退出

'<

cout<<"************************"<

if(m==1)

折半查找算法:

for(inti=1;ivST.Iength;i++)//for(intj=i;j>=1;j--)if(ST.r[j].xuehao

LI=ST.r[j];

ST.r[j]=ST.r[j-1];

ST.r[j-1]=LI;

使学号变为有序

 

 

}

inta=0;

coutvv"输入要查找的学号"<>n;

intlow,high,mid;

low=0;high=ST.Iength-1;//while(low<=high)

{mid=(low+high)/2;

if(n==ST.r[mid].xuehao){

cout<

break;

}

elseif(nvST.r[mid].xuehao)high=mid-1;//else

low=mid+1;//

置区间初值

继续在前半区间进行查找

继续在后半区间进行查找

顺序查找算法:

coutvv"输入要查找的姓名"<>name;

for(inti=0;ivST.length;i++)

{

if(name==ST.r[i].xingming)

{

coutvvST.r[i].xuehaovv""vvST.r[i].xingmingvv""vvST.r[i].xingbeivv""vvST.r[i].chengjilvv"

 

"<

"<

}

1、插入排序

每步将一个待排序的记录,按其关键码大小,插入到前面已经排好序的一组记录的适当位置上,直到记录全部插入为止。

//按学号排序,使用插入排序

RecordTypeLI;//定义存储学号向量

for(inti=1;i

for(intj=i;j>=1;j--)

if(ST.r[j].xuehao

{

LI=ST.r[j];

ST.r[j]=ST.r[j-1];

ST.r[j-1]=LI;}

2、选择排序

首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换

再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个记录交换

重复上述操作,共进行n-1趟排序后,排序结束。

//按成绩1排序,用选择排序

RecordTypeLI;

for(inti=0;ivST.Iength;i++)for(intj=i+1;jvST.Iength;j++){if(ST.r[i].chengji1>ST.r[j].chengji1)

{LI=ST.r[j];ST.r[j]=ST.r[i];ST.r[i]=LI;

 

六、运行测试结果

输入学生信息

输3拖于1姓許性男成篇-g;

入号名d别

睪甜拮息如下学号姓名

1

2

3

请选择要迸人的模块◎〉查询

<3>dStrj

sed

«ue

noc

性别

―I

成绩1

99

99

9Q

成绩2

99

9G

95

总分

198

18E

18E

以多种方式进行查找

ITS

1S5

 

111

氓据学号查询

艮g姓4查询

<3>®i性钢查询

2

输入要查找的姓名

sed

1sed

19B

ipl

<2>Wi姓杳查询

<3>><4>i1输入要查找的学号1

1zed男9999

198

*1斗厂17y"■/I-J

⑶a据成绩胡甘

肇生

2

3

h序完毕

的蜜下

eue

noc

zed

性别

咸绩1

B9

9Q

99

成绩玄

95

9号

总分

185

1S5

198

 

 

六、实验总结

定得了解,知道了

通过本次实验我对查找排序的应用有了各种查找排序的基本知识。

同时,通过自己数次的调试、修改也

搞懂了许多以前比较模糊的知识点,比如这次的界面是复制过来的,其中很多语句经过同学的讲解都理解了。

但这次实验也有很多不尽人意的地方,我将在以后多学习同学优秀的地方.也会在以后的学习过程中要尽量考虑周全,使程序更有实用价值,提高编程能力。

 

七、源代码

#inelude

usingnamespacestd;

#include

#defineMAXSIZE100//设记录不超过20个

定义每个记录

typedefstruct//

{

stringxingming;

stringxingbei;

floatxuehao;

(数据元素)的结构

//

//

//

//

姓名

性别

学号

成绩1成绩2

总分

floatchengji1,chengji2;

floatzong;

}RecordType;

typedefstruct//

{

RecordTyper[MAXSIZE+1];//

intlength;//顺序表的长度

}SqList;

voidcaidan(SqList&ST);

voidCreatList(SqList&ST)//

{

cout<<"输入学生个数"<

cin>>ST.Iength;

for(inti=0;i

{

cout<<"输入第"<

cin>>ST.r[i].xuehao;

cout<<"姓名"<

cin>>ST.r[i].xingming;

cout<<"性别"<

cin>>ST.r[i].xingbei;

cout<<"成绩1"<

cin>>ST.r[i].chengji1;

cout<<"成绩2"<

cin>>ST.r[i].chengji2;

//

定义顺序表的结构

存储顺序表的向量

创建学生的相关信息

 

 

}cout<<"输入完毕"<

}

voidzong(SqList&ST)//

{

计算总分

for(inti=0;i

{

ST.r[i].zong=ST.r[i].chengji1+ST.r[i].chengji2;

}

voidshuchu(SqList&ST)//

{

cout<<"学生的信息如下cout<<"学号姓名for(inti=0;i

cout<

"<

"<

}

}

voidchaxun(SqList&ST)//

{

11:

cout<

输出

"<

性别成绩

查询信息

cout<<"

(1)

根据学号查询"<

cout<<"

(2)

根据姓名查询"<

cout<<"(3)

根据性别查询"<

cout<<"(4)

退出"<

intn,m;

stringname;

stringxb;

cin>>m;

if(m==1)

//

{

RecordTypeLI;//

for(inti=1;i=1;j--)

成绩2总分"<

"<

"<

折半查找

使学号变为有序

 

 

if(ST.r[j].xuehao

{

LI=ST.r[j];

ST.r[j]=ST.r[j-1];

ST.r[j-1]=LI;

}

12:

inta=0;

cout<<"输入要查找的学号"<>n;

intlow,high,mid;low=0;high=ST.length-1;//while(low<=high)

{

mid=(low+high)/2;

if(n==ST.r[mid].xuehao)

{

cout<

"<

a=1;break;

}

elseif(n

}

if(!

a)

{

cout<<"

置区间初值

"<

"<

继续在前半区间进行查找

继续在后半区间进行查找

cout<<"gotol2;

}

gotol1;

}

if(m==2)

{

所查信息不存在!

"<

//

顺序查找

 

l3:

inta=0;

cout<<"输入要查找的姓名"<>name;

for(inti=0;i

{

if(name==ST.r[i].xingming)

{

cout<

"<

"<

}

}

if(!

a)

"<

"<

cout<<"

cout<<"goto13;

所查信息不存在!

"<

goto11;

}

if(m==3)

{

14:

inta=0;

cout<<"输入要查找性别"<

cin>>xb;

for(inti=0;i

{

if(xb==ST.r[i].xingbei)

{

cout<

"<

"<

a=1;

}

}

if(!

a)

//

顺序查找

"<

"<

 

{

cout<<"所查信息不存在!

"<

cout<<"请重新输入"<

gotol4;

}

gotol1;

}if(m==4)

{

caidan(ST);

}

排序

}

voidpaixu(SqList&ST)//

{

l1:

intn;

根据学号排序"<

cout<

cout<<"

(1)

cout<<"

(2)

for(inti=1;i

for(intj=i;j>=1;j--)if(ST.r[j].xuehao

LI=ST.r[j];

ST.r[j]=ST.r[j-1];

ST.r[j-1]=LI;

}shuchu(ST);

cout<<"排序完毕"<

}

if(n==2)

{

RecordTypeLI;

for(inti=0;i

for(intj=i+1;j

if(ST.r[i].chengji1>ST.r[j].chengji1){

LI=ST.r[j];

ST.r[j]=ST.r[i];

ST.r[i]=LI;

}

}

shuchu(ST);

cout<<"排序完毕"<

根据成绩2排序,使用选择法排序

}

if(n==3)//

{

RecordTypeLI;

for(inti=0;i

for(intj=i+1;j

if(ST.r[i].chengji2>ST.r[j].chengji2){

LI=ST.r[j];ST.r[j]=ST.r[i];ST.r[i]=LI;

}

}

shuchu(ST);

cout<<"排序完毕"<

gotol1;

}

if(n==4)//根据总成绩排序,使用选择法排序

{

RecordTypeLI;

for(inti=0;i

for(intj=i+1;j

{

if(ST.r[i].zong>ST.r[j].zong)

{

LI=ST.r[j];

ST.r[j]=ST.r[i];

ST.r[i]=LI;

}

}

shuchu(ST);

cout<<"排序完毕"<

退出

}

if(n==5)//

{

caidan(ST);

}

选择菜单

}

voidcaidan(SqList&ST)//

{

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);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

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

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