实验七 查找
更新时间:2023-11-13 17:50:01 阅读量: 教育文库 文档下载
- 实验七步法推荐度:
- 相关推荐
实验七 查找、排序的应用
一、实验目的
1、本实验可以使学生更进一步巩固各种查找和排序的基本知识。 2、学会比较各种排序与查找算法的优劣。 3、学会针对所给问题选用最适合的算法。
4、掌握利用常用的排序与选择算法的思想来解决一般问题的方法和技巧。
二、实验内容
[问题描述]
学生信息管理系统 [基本要求]
设计一个学生信息管理系统,学生对象至少要包含:学号、姓名、性别、成绩1、成绩2、总成绩等信息。要求实现以下功能:
1.试选择一种方式实现:基于数组、链表或文件方式 2.总成绩要求自动计算;
3.查询:分别给定学生学号、姓名、性别,能够查找到学生的基本信息(要求至少用两种查找算法实现);
排序:分别按学生的学号、成绩1、成绩2、总成绩进行排序(要求至少用两种排序算法实现)。 [测试数据]
由学生依据软件工程的测试技术自己确定。
三、实验前的准备工作
1、掌握哈希表的定义,哈希函数的构造方法。 2、掌握一些常用的查找方法。 1、掌握几种常用的排序方法。 2、掌握直接排序方法。
四、实验报告要求
1、实验报告要按照实验报告格式规范书写。 2、实验上要写出多批测试数据的运行结果。
3、结合运行结果,对程序进行分析。
三、实验步骤
typedef struct
//定义每个记录(数据元素)的结构 {
string xingming; //姓名 string xingbei; //性别 float xuehao; //学号
float chengji1,chengji2; //成绩1,成绩2 float zong; //总分 }RecordType;
typedef struct //定义顺序表的结构 {
RecordType r[MAXSIZE +1]; //存储顺序表的向量
查找
顺序查找
从表的一端开始逐个进行记录的关键字和给定值的比较。在这里从表尾开始并把下标为0的作为哨兵。
void chaxun(SqList &ST) //查询信息 {
cout<<\ cout<<\根据学号查询 ~\ cout<<\根据姓名查询 ~\ cout<<\根据性别查询 ~\ cout<<\退出 ~\
cout<<\顺序查找算法:
cout<<\输入要查找的姓名\ cin>>name;
for(int i=0;i if(name==ST.r[i].xingming) { cout< 排序 a.直接插入排序 每步将一个待排序的记录,按其关键码大小,插入到前面已经排好序的一组记录的适当位置上,直到记录全部插入为止。 //按学号排序,使用插入排序 void inssort(recordlist * l) { int j; for(int i=2;i<=l->length;i++) { l->r[0].key=l->r[i].key; j=i-1; while(l->r[0].key l->r[j+1].key =l->r[j].key; j=j-1; } l->r[j+1].key=l->r[0].key; } for(int m=1;m<=l->length;m++) cout< b.冒泡排序 void bubblesort(recordlist * l) { int i,j,x; int change=TRUE; for(i=1;i<=l->length && change;++i) { change=FALSE; for(j=1;j<=l->length-i;++j) if(l->r[j].key>l->r[j+1].key) { x=l->r[j].key; l->r[j].key=l->r[j+1].key l->r[j+1].key=x; change=TRUE; } } for(int m=1;m<=l->length;m++) cout< } c.快速排序 int qkpass(recordlist * l,int left,int right) { int x=l->r[left].key; int low=left; int high=right; while(low while(low if(low l->r[low].key =l->r[high].key low++; } while(low if(low l->r[high].key=l->r[low].key; high--; } } l->r[low].key=x; return low; } void qksort(recordlist *l,int low,int high) { int pos; if(low<=high) { pos=qkpass(l,low,high); qksort(l,low,pos-1); qksort(l,pos+1,high); } } d.简单选择排序 void selectsort(recordlist * l) { int i,j,k,x,n; for(i=1;i<=n-1;++i) { k=i; for(j=i+1;j<=n;++j) { if(l->r[j].key if(k!=i) { x=l->r[i].key; l->r[i].key=l->r[k].key; l->r[k].key=x; } } } } 四、测试数据与实验结果 1.直接插入排序 2.冒泡排序 3.快速排序 4.简单选择排序 5.顺序查找 五、实验总结 通过本次实验我对查找排序的应用有了相对的了解。通过自己数次的调试、修改也搞懂了许多以前比较模糊的知识点,比如这次的界面是复制过来的,其中很多语句经过同学的帮助及查找资料后可以理解。但这次实验也有很多不尽人意的地方,程序与老师的要求可能会有些出入我将在以后的试验中会加强自己的编程能力,多学习同学优秀的地方.也会在以后的学习过程中要尽量考虑周全。 六、源代码 #include typedef int keytype; typedef struct { string xingming; //姓名 string xingbei; //性别 float xuehao; //学号 float chengji1,chengji2; //成绩1,成绩2 float zong; //总分 int key; int next; }recordtype; typedef struct { recordtype r[listsize +1]; int length; }recordlist; typedef int pvector[radix]; //直接插入排序 void inssort(recordlist * l) { int j; for(int i=2;i<=l->length;i++) { l->r[0].key=l->r[i].key; j=i-1; while(l->r[0].key l->r[j+1].key =l->r[j].key; j=j-1; } l->r[j+1].key=l->r[0].key; } for(int m=1;m<=l->length;m++) cout< //冒泡排序 void bubblesort(recordlist * l) { int i,j,x; int change=TRUE; for(i=1;i<=l->length && change;++i) { change=FALSE; for(j=1;j<=l->length-i;++j) if(l->r[j].key>l->r[j+1].key) { x=l->r[j].key; l->r[j].key=l->r[j+1].key l->r[j+1].key=x; change=TRUE; } } for(int m=1;m<=l->length;m++) cout< //简单选择排序 void selectsort(recordlist * l) { int i,j,k,x,n; for(i=1;i<=n-1;++i) { k=i; for(j=i+1;j<=n;++j) { if(l->r[j].key if(k!=i) { x=l->r[i].key; l->r[i].key=l->r[k].key; l->r[k].key=x; } } } } //快速排序 int qkpass(recordlist * l,int left,int right) { int x=l->r[left].key; int low=left; int high=right; while(low while(low if(low l->r[low].key =l->r[high].key low++; } while(low if(low { l->r[high].key=l->r[low].key; high--; } } l->r[low].key=x; return low; } void qksort(recordlist *l,int low,int high) { int pos; if(low<=high) { pos=qkpass(l,low,high); qksort(l,low,pos-1); qksort(l,pos+1,high); } } //顺序查找 void chaxun(SqList &ST) //查询信息 { cout<<\ cout<<\根据学号查询 ~\ cout<<\根据姓名查询 ~\ cout<<\根据性别查询 ~\ cout<<\退出 ~\ cout<<\ cout<<\输入要查找的姓名\ cin>>name; for(int i=0;i if(name==ST.r[i].xingming) { cout< void main() {
正在阅读:
实验七 查找11-13
小学语文苏教版四年级下册9《祁黄羊》比赛获奖教案优质课公开课05-19
个人自我鉴定范文01-23
机房日常巡检制度11-19
苹果公司案例分析07-06
社会调查报告【优秀6篇】03-25
宪法学选择题模拟04-23
2019年过春节作文150字06-14
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 查找
- 实验
- 我国农业上市公司财务绩效评价研究
- 注浆综述
- 浅谈烟草商业企业的法律风险防控11.18
- 会计师事务所内部质量控制制度
- 主要发达国家的垃圾处理现状
- 碳源流量对pecvd制备碳纳米管形貌的影响修改稿2 - 图文
- 第二章 行列式
- CT诊断试卷(答案)
- 川大《国际法学》第一次作业答案
- 天津市建筑材料复试必试项目抽样及代表批量填写说明
- 行政事业单位收入管理制度
- 五年级下音乐教案-童声中国娃苏少版2014
- 某饲料厂污水处理方案
- 福建省福州八县一中2018-2019学年高一物理上学期期中试题
- 制药企业生产管理 试题库
- 试述社会主义国家执政党加强自身建设的必要性
- 21世纪科学的五大突破
- 签到表(新)
- 0812鲁迅小说专题研究笔记
- 浅谈关于加强房地产行业税收管理的思考