查询与排序实验报告.docx

上传人:b****6 文档编号:5670116 上传时间:2022-12-31 格式:DOCX 页数:10 大小:17.68KB
下载 相关 举报
查询与排序实验报告.docx_第1页
第1页 / 共10页
查询与排序实验报告.docx_第2页
第2页 / 共10页
查询与排序实验报告.docx_第3页
第3页 / 共10页
查询与排序实验报告.docx_第4页
第4页 / 共10页
查询与排序实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

查询与排序实验报告.docx

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

查询与排序实验报告.docx

查询与排序实验报告

学院专业班学号

姓名协作者_____________教师评定_________________

实验题目查询与排序

综合实验评分表

指导教师评分标准

序号

评分项目

评分标准

满分

打分

1

完成度

按要求独立完成实验准备、程序调试、实验报告撰写。

20

2

实验内容

(1)完成功能需求分析、存储结构设计;

(2)程序功能完善、可正常运行;

(3)测试数据正确,分析正确,结论正确。

30

3

实验报告

内容齐全,符合要求,文理通顺,排版美观。

40

4

总结

对实验过程遇到的问题能初步独立分析,解决后能总结问题原因及解决方法,有心得体会。

10

 

实验报告

一、实验目的与要求

1、掌握散列表的构造及实现散列查找;

2、掌握堆排序的算法;

3、综合比较各类排序算法的性能。

二、实验内容

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include"windows.h"

#defineMAX20

typedefstruct{

unsignedlongkey;

intresult;

charname[30];}RNode;

RNodet[MAX],r[MAX];

inth(unsignedlongk)/*散列函数*/

{

return((k-3109005700)%11);

}

voidinsert(RNodet[],RNodex)/*插入函数,以线性探查方法解决冲突*/

{

inti,j=0;

i=h(x.key);

while((j

=x.key)&&(t[(i+j)%MAX].key>0))

j++;

if(j==MAX)printf("full\n");

i=(i+j)%MAX;

if(t[i].key==0)

{t[i]=x;}

else

{

if(t[i].key==x.key)

printf("记录已存在!

\n");

}

}

intsearch(RNodet[],unsignedlongk)/*插入函数,以线性探查方法解决冲突*/

{

inti,j=0;

i=h(k);

while((j

=k)&&(t[(i+j)%MAX].key!

=0))

j++;

i=(i+j)%MAX;

if(t[i].key==k)

return(i);

if(j==MAX)

returnMAX;

else

return(-i);

}

voidsift(RNoder[],intv,intw)

{

inti,j;

RNodea;

i=v;

a=r[i];

j=2*i+1;

while(j<=w)

{

if((jr[j+1].result))

j++;

if(a.result>r[j].result)

{r[i]=r[j];i=j;j=2*j+1;}

elsebreak;

}

r[i]=a;

}

voidsort(RNoder[],intn)

{

inti;

RNodey;

for(i=n/2-1;i>=0;i--)

sift(r,i,n-1);

for(i=n-1;i>0;i--)

{y=r[0];r[0]=r[i];r[i]=y;

printf("学生姓名:

%s\t学生学号:

%u\t学生成绩:

%d\n",r[i].name,r[i].key,r[i].result);

sift(r,0,i-1);

}

printf("学生姓名:

%s\t学生学号:

%u\t学生成绩:

%d\n",r[0].name,r[0].key,r[0].result);

}

intmenu()/*菜单函数*/

{

intselect;

printf("\n\n");

printf("\n");

printf("\t\t*************查找排序实验******************\n");

printf("\t\t*\n");

printf("\t\t*************欢迎进入系统******************\n");

printf("\t\t*menu:

*\n");

printf("\t\t*1.查找*\n");

printf("\t\t*2.排序*\n");

printf("\t\t*0.退出*\n");

printf("\t\t*******************************************\n");

printf("\n");

printf("\t\t\t请输入0--2\n");

printf("\n");

printf("请选择您所要的操作(选择(0)退出):

");

scanf("%d",&select);

getchar();

return(select);

}

voidmain()/*主函数*/

{

inti,s,n,select;

intj=0,m=0;

RNodey;

for(i=0;i

t[i].key=0;/*初始化*/

for(i=0;i<10;i++)/*导入记录*/

{

switch(i){

case0:

{

RNodex;

x.key=310900***;

strcpy(x.name,"***");

x.result=90;

insert(t,x);

break;}

case1:

{

RNodex;

x.key=31090***1;

strcpy(x.name,"***");

x.result=95;

insert(t,x);

break;}

case2:

{

RNodex;

x.key=3109005***;

strcpy(x.name,"***");

x.result=92;

insert(t,x);

break;}

case3:

{

RNodex;

x.key=31090***;

strcpy(x.name,"***");

x.result=93;

insert(t,x);

break;}

case4:

{

RNodex;

x.key=3109005***;

strcpy(x.name,"***");

x.result=94;

insert(t,x);

break;}

case5:

{

RNodex;

x.key=310900***;

strcpy(x.name,"***");

x.result=91;

insert(t,x);

break;}

case6:

{

RNodex;

x.key=3109005***;

strcpy(x.name,"***");

x.result=96;

insert(t,x);

break;}

case7:

{

RNodex;

x.key=310900***;

strcpy(x.name,"***");

x.result=99;

insert(t,x);

break;}

case8:

{

RNodex;

x.key=310900***;

strcpy(x.name,"***");

x.result=98;

insert(t,x);

break;}

case9:

{

RNodex;

x.key=310900***;

strcpy(x.name,"***");

x.result=97;

insert(t,x);

break;}

}

}

printf("\n\n\n\n\n\n\n");

system("cls");

loop:

{

printf("\n\n\n");

select=menu();

switch(select){

case1:

{

printf("\n请输入要查找的学生学号:

");

scanf("%u",&y.key);

s=search(t,y.key);

if(s==MAX||s<0)printf("notfind\n");

else

{printf("\n\n你要查找的学生信息\n");

printf("学生姓名:

%s\t学生学号:

%u",t[s].name,t[s].key);}

break;}

case2:

{

for(i=0;i

{if(t[i].key!

=0)

{

r[j++]=t[i];

m++;

}

}

printf("排序之前:

\n\n");

for(i=0;i

printf("学生姓名:

%s\t学生学号:

%u\t学生成绩:

%d\n",r[i].name,r[i].key,r[i].result);

printf("\n排序之后:

\n");

sort(r,m);

break;

}

case0:

exit(0);

}

getchar();

gotoloop;

}

}

三、实验结果和数据处理

(1)查找数据(310900****)

 

(2)排序

 

四、总结

这次的课程实验完成了主控界面,录入,输出,排序,查找,结束界面等功能。

在程序调试过程之中,我还是个初学者,在编写程序的过程中不断出现不同状况的错误,在修改中不断发现自己的问题和不足。

通过编译调试,程序提示错误所在,然后我们根据提示再进行修改。

从这个过程之中,使我多多思考问题,不断摸索,尽量自己发现错误所在并加以改正,以便在下次不再犯同类型的错误。

也就是说在调试的过程中,不断的学习,不断的改进,提高自身C语言学习能力和算法设计能力。

五、问题与讨论

1、分析你所构造散列表的查找成功的平均查找长度?

0

1

2

3

4

5

6

7

8

9

10

…33

…34

…35

…36

…37

…38

…39

…40

…41

…32

1

1

1

1

1

1

1

1

1

1

查找成功的平均查找长度:

(1+1+1+1+1+1+1+1+1+1)/10=1

2、堆排序属于什么类型的排序?

它适合于什么要求的排序,其空间按复杂度和时间复杂度如何?

答:

堆排序属于树形选择排序方法,它适合于排序较大文件的排序方法,是不稳定的。

空间复杂度为O

(1),时间复杂度为O(nlog2n).

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

当前位置:首页 > 经管营销

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

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