(完整word版)查找、排序的应用 实验报告
实验七查找、排序的应用
一、实验目的
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的作为哨兵。 void chaxun(SqList &ST) //查询信息 { cout<<"\n************************"< cout<<"~ (1)根据学号查询 ~"< cout<<"~ (2)根据姓名查询 ~"< cout<<"~ (3)根据性别查询 ~"< cout<<"~ (4)退出 ~"< cout<<"************************"< for(int i=1;i for(int j=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; } int a=0; cout<<"输入要查找的学号"< cin>>n; int low,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; } else if(n high=mid-1; // 继续在前半区间进行查找 else low=mid+1; // 继续在后半区间进行查找 顺序查找算法: cout<<"输入要查找的姓名"< cin>>name; for(int i=0;i { if(name==ST.r[i].xingming) { cout< "< "< "< "< "< a=1; } 1、插入排序 每步将一个待排序的记录,按其关键码大小,插入到前面已经排好序的一组记录的适当位置上,直到记录全部插入为止。 //按学号排序,使用插入排序 RecordType LI; //定义存储学号向量 for(int i=1;i for(int j=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排序,用选择排序 RecordType LI; for(int i=0; i for (int j=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; 六、运行测试结果输入学生信息 以多种方式进行查找 按总成绩进行排序 六、实验总结 通过本次实验我对查找排序的应用有了一定得了解,知道了各种查找排序的基本知识。同时,通过自己数次的调试、修改也搞懂了许多以前比较模糊的知识点,比如这次的界面是复制过来的,其中很多语句经过同学的讲解都理解了。但这次实验也有很多不尽人意的地方,我将在以后多学习同学优秀的地方.也会在以后的学习过程中要尽量考虑周全,使程序更有实用价值,提高编程能力。 七、源代码 #include using namespace std; #include #define MAXSIZE 100 //设记录不超过20个 typedef struct //定义每个记录(数据元素)的结构{ string xingming; //姓名 string xingbei; //性别 float xuehao; //学号 float chengji1,chengji2; //成绩1,成绩2 float zong; //总分 }RecordType; typedef struct //定义顺序表的结构 { RecordType r[ MAXSIZE +1 ]; //存储顺序表的向量 int length; //顺序表的长度 }SqList; void caidan(SqList &ST); void CreatList(SqList &ST)//创建学生的相关信息 { cout<<"输入学生个数"< cin>>ST.length; for(int i=0;i { cout<<"输入第"< 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<<"输入完毕"< } void zong(SqList &ST) //计算总分 { for(int i=0;i { ST.r[i].zong=ST.r[i].chengji1+ST.r[i].chengji2; } } void shuchu(SqList &ST)//输出 { cout<<"学生的信息如下"< cout<<"学号姓名性别成绩1 成绩2 总分 "< for(int i=0;i { cout< "< } } void chaxun(SqList &ST) //查询信息 { l1: cout< cout<<"(1)根据学号查询"< cout<<"(2)根据姓名查询"< cout<<"(3)根据性别查询"< cout<<"(4)退出"< int n,m; string name; string xb; cin>>m; if(m==1) //折半查找 { RecordType LI; //使学号变为有序 for(int i=1;i for(int j=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; } l2: int a=0; cout<<"输入要查找的学号"< cin>>n; int low,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; } else if(n high=mid-1; // 继续在前半区间进行查找 else low=mid+1; // 继续在后半区间进行查找 } if(!a) { cout<<"所查信息不存在!"< cout<<"请重新输入"< goto l2; } goto l1; } if(m==2) //顺序查找 { l3: int a=0; cout<<"输入要查找的姓名"< cin>>name; for(int i=0;i { if(name==ST.r[i].xingming) { cout< a=1; } } if(!a) { cout<<"所查信息不存在!"< cout<<"请重新输入"< goto l3; } goto l1; } if(m==3) //顺序查找 { l4: int a=0; cout<<"输入要查找性别"< cin>>xb; for(int i=0;i { if(xb==ST.r[i].xingbei) { cout< a=1; } } if(!a) { cout<<"所查信息不存在!"< cout<<"请重新输入"< goto l4; } goto l1; } if(m==4) { caidan(ST); } } void paixu(SqList &ST) //排序 { l1: int n; cout< cout<<"(1)根据学号排序"< cout<<"(2)根据成绩1排序"< cout<<"(3)根据成绩2排序"< cout<<"(4)根据总成绩排序"< cout<<"(5)退出"; cout< cin>>n; if(n==1) //按学号排序,使用插入排序{ RecordType LI; //定义存储学号向量 for(int i=1;i for(int j=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<<"排序完毕"< goto l1; } if(n==2) //按成绩1排序,用选择排序 { RecordType LI; for(int i=0; i for (int j=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<<"排序完毕"< goto l1; } if(n==3) // 根据成绩2排序,使用选择法排序{ RecordType LI; for(int i=0; i for (int j=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<<"排序完毕"< goto l1; } if(n==4) //根据总成绩排序,使用选择法排序 { RecordType LI; for(int i=0; i for (int j=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<<"排序完毕"< goto l1; } if(n==5) //退出 { caidan(ST); } } void caidan(SqList &ST)//选择菜单 { cout<<"请选择要进入的模块"< cout<<"(1)查询"< cout<<"(2)排序"< cout<<"(3)退出"< int c; cin>>c; if(c==1) { chaxun(ST); } if(c==2) { paixu(ST); } if(c==3) { exit(0); } } void main() { SqList ST; CreatList(ST); zong(ST); shuchu(ST); caidan(ST); } 《数据结构》实验报告排序实验题目: 输入十个数,从插入排序,快速排序,选择排序三类算法中各选一种编程实现。 实验所使用的数据结构内容及编程思路: 1. 插入排序:直接插入排序的基本操作是,将一个记录到已排好序的有序表中,从而得到一个新的,记录增一得有序表。 一般情况下,第i 趟直接插入排序的操作为:在含有i-1 个记录的有序子序列r[1..i-1 ]中插入一个记录r[i ]后,变成含有i 个记录的有序子序列r[1..i ];并且,和顺序查找类似,为了在查找插入位置的过程中避免数组下标出界,在r [0]处设置哨兵。在自i-1 起往前搜索的过程中,可以同时后移记录。整个排序过程为进行n-1 趟插入,即:先将序列中的第一个记录看成是一个有序的子序列,然后从第2 个记录起逐个进行插入,直至整个序列变成按关键字非递减有序序列为止。 2. 快速排序:基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 假设待排序的序列为{L.r[s] ,L.r[s+1],…L.r[t]}, 首先任意选取一个记录 (通常可选第一个记录L.r[s])作为枢轴(或支点)(PiVOt ),然后按下述原则重新排列其余记录:将所有关键字较它小的记录都安置在它的位置之前,将所有关键字较大的记录都安置在它的位置之后。由此可以该“枢轴”记录最后所罗的位置i 作为界线,将序列{L.r[s] ,… ,L.r[t]} 分割成两个子序列{L.r[i+1],L.[i+2], …,L.r[t]}。这个过程称为一趟快速排序,或一次划分。 一趟快速排序的具体做法是:附设两个指针lOw 和high ,他们的初值分别为lOw 和high ,设枢轴记录的关键字为PiVOtkey ,则首先从high 所指位置起向前搜索找到第一个关键字小于PiVOtkey 的记录和枢轴记录互相交换,然后从lOw 所指位置起向后搜索,找到第一个关键字大于PiVOtkey 的记录和枢轴记录互相 交换,重复这两不直至low=high 为止。 具体实现上述算法是,每交换一对记录需进行3 次记录移动(赋值)的操作。而实际上, 实验七查找、排序的应用 一、实验目的 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 word基本操作实验报告 一、实验目的与要求 1.掌握word的基本操作; 2.掌握字符格式、段落格式和页面格式等排版技术; 3.掌握图文混排、表格处理和邮件合并技术; 4.熟悉个人名片或毕业论文的设计与制作; 5.学会自己提出问题,并得出解决问题的方法。 二、实验内容与方法 1.word的基本操作,通过上机摸索,并查阅书籍网络了解。 2.word的字符格式,段落格式和页面格式等排版技术,通过上机摸索,并查阅书籍网络了解。 3.word的图文混排、表格处理和邮件合并技术,通过上机摸索,并查阅书籍网络了解。 4. 通过word进行个人名片或毕业论文的设计与制作,通过上机摸索,并查阅书籍网络了解。 三、实验步骤与过程 1.word的基本操作:①启动word软件 (1) 启动“开始”菜单中的microsoft word程序 (2) 双击资源管理器或“我的电脑”中的c:\program files\microsoft office\office11\winword.exe程序 (3) 双击word 文档文件(*.doc) (4) 双击桌面上的word图标 (5)开始-运行-输入“winword”②认识word2003窗口(1)标题栏位于屏幕最顶端的是标题栏,由控制菜单图标、文件名、最小化按钮、最大化(还原)按钮、关闭按钮组成。(2)菜单栏 菜单栏位于标题栏下面。使用菜单栏可以执行word的许多命令。菜单栏共有九个菜单:文件、编辑、视图、插入、格式、工具、表格、窗口、帮助。当鼠标指针移到菜单标题上时,菜单标题就会凸起,单击后弹出下拉菜单。在下拉菜单中移动鼠标指针时,被选中的菜单项就会高亮显示,再单击,就会执行该菜单所代表的命令。如“文件”—“打开”,就会弹出“打开”文件对话框。(3)工具栏 标题栏下面的是工具栏,使用它们可以很方便地进行工作。通常情况下,word会显示【常用】和【格式】两个工具栏。 “常用”工具栏:新建、打开、复制、粘贴、打印、撤消、恢复等“格式”工具栏:字体、字号、下划线、边框、对齐方式等 如果想了解工具栏上按钮的简单功能,只需将鼠标指针移到该按钮上,过一会儿旁边会出现一个小框,显示出按钮的名称或功能。 word窗口中可以有许多工具栏,可以根据需要在“视图”—“工具栏”中增加或减少工具栏。每一个工 具栏都可以用鼠标拖动到屏幕的任意位置,所以又称为浮动工具栏。工具栏内图标按钮体现了“菜单栏”中的一些主要功能。我们可以利用这些按钮进行相应操作。如我要打开一个文件,除了可以使用菜单栏外,还可以使用工具栏上的按钮。 (4)编辑窗口 再往下的空白区域就是word的编辑窗口,输入的文字就显示在这里。文档中闪烁的竖线称为光标,代表文字的当前输入位置。(5)标尺 在编辑窗口的上面和左面有一个标尺,分别为水平标尺和垂直标尺,用来查看正文的高度和宽度,以及图片、文本框、表格的宽度,还可以用来排版正文。( 6)滚动条在编辑窗口的右面和下面有滚动条,分别为垂直滚动条和水平滚动条,用来滚动文档,显示在屏幕中看不到的内容。可以单击滚动条中的按钮或者拖动滚动框来浏览文档。(7)显示方式按钮 电子科技大学实验报告 课程名称:数据结构与算法 学生姓名: 学号: 点名序号: 指导教师: 实验地点:基础实验大楼 实验时间: 5月20日 2014-2015-2学期 信息与软件工程学院《数据结构》实验报告——排序.docx
(完整word版)查找、排序的应用 实验报告
WORD实验报告
实验报告-排序与查找