查询与排序 实验报告.docx
- 文档编号:27543262
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:11
- 大小:17.71KB
查询与排序 实验报告.docx
《查询与排序 实验报告.docx》由会员分享,可在线阅读,更多相关《查询与排序 实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
查询与排序实验报告
学院专业班学号
协作者_____________教师评定_________________
实验题目查询与排序
综合实验评分表
指导教师评分标准
序号
评分项目
评分标准
满分
打分
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((j 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).
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查询与排序 实验报告 查询 排序 实验 报告