(完整word版)查找、排序的应用 实验报告
word操作实验报告
word操作实验报告Word操作实验报告一、引言在现代办公软件中,微软的Word无疑是最常用的文档处理工具之一。
本实验旨在探索Word的一些基本操作和功能,以提高我们的文档处理能力。
二、页面设置和格式调整1. 页面设置在开始编辑文档之前,我们首先需要对页面进行设置。
Word提供了丰富的页面设置选项,包括页面大小、边距、页眉页脚等。
通过点击页面布局选项卡中的“页面设置”按钮,我们可以轻松调整页面设置,以适应不同的需求。
2. 字体和段落格式在编辑文档的过程中,我们通常需要调整字体和段落的格式。
Word提供了多种字体和段落格式选项,包括字号、字体样式、行间距、对齐方式等。
通过选择文本并点击“字体”或“段落”选项卡中的相应按钮,我们可以快速调整文本的格式。
三、插入和编辑文本1. 插入文本在Word中,我们可以通过多种方式插入文本。
最简单的方法是直接在文档中输入文字。
此外,我们还可以从其他文档中复制粘贴文本,或者通过插入文本框、插入对象等功能来插入特定类型的文本。
2. 编辑文本Word提供了丰富的文本编辑功能,使我们可以轻松地对文本进行修改和调整。
例如,我们可以使用剪切、复制和粘贴功能来移动和复制文本段落。
同时,Word还提供了查找和替换功能,方便我们快速定位和修改文本内容。
四、插入和编辑图像1. 插入图像在文档中插入图像可以使得内容更加生动和直观。
Word允许我们插入各种类型的图像,如照片、图表、形状等。
通过点击“插入”选项卡中的“图片”按钮,我们可以从计算机中选择并插入图像。
2. 编辑图像一旦插入了图像,我们可以对其进行各种编辑操作。
Word提供了旋转、裁剪、调整大小等功能,以便我们根据需要对图像进行调整。
此外,Word还可以添加边框、应用艺术效果等,以增强图像的效果。
五、表格和公式的应用1. 插入表格表格是Word中常用的排版工具之一。
通过点击“插入”选项卡中的“表格”按钮,我们可以选择插入的表格的行列数,并自定义表格样式。
排序实验报告_排序综合实验报告材料
班级
2*10^7
10 电信 1 班
10^8
操作系统
10^5
Microsoft Windows 7 旗舰版 (64 位/Service Pck 1)
正序
xxxxxxxxxxxxx
逆序
编译软件
直接插入
Visul C++ 6.0
(带监视哨〕
emil
C
609803959.
24.874
10^4
100.158
2*10^4
中选出键值最小的记录,与无序区第一个记录 R 交换;新的无序区为 R 到
各种排序试验结果:
R[n],从中再选出键值最小的记录,与无序区第一个记录 R 交换;类似, CPU
第 i 趟排序时 R 到 R[i-1]是有序区,无序区为 R[i]到 R[n],从中选出键
(英特尔)Intel(R) Core(TM) i5 CPU M 480 2.67GHz
〔1〕二路并归排序:开始时,将排序表 R 到 R[n]看成 n 个长度为 1
录,顺序放在已排好序的子序列的后面〔或最前〕,直到全部记录排序完 的有序子表,把这些子表两两并归,便得到 n/2 个有序的子表〔当 n 为奇
毕。
数时,并归后仍是有一个长度为 1 的子表〕;然后,再把这 n/2 个有序的
〔1〕直接选择排序:首先,全部记录组成初始无序区 R 到 R[n],从 子表两两并归,如此反复,直到最终得到一个程度为 n 的有序表为止。
指导老师: 胡圣荣
序与排序要求相反时就交换两者的位置,直到没有反序的记录为止。
日期: 20XX.12.15~20XX.1.5
〔1〕冒泡排序:设想排序表 R 到 R[n]垂直放置,将每个记录 R[i]看
排序检验实验报告
一、实验目的1. 理解排序检验的基本原理和方法。
2. 掌握排序检验的应用场景。
3. 通过实际操作,验证排序检验的有效性。
二、实验原理排序检验(Rank Test)是一种非参数检验方法,用于检验两个独立样本是否来自同一总体。
其基本思想是将样本数据从小到大排序,计算两个样本的秩和,然后根据秩和比较两个样本是否具有显著差异。
三、实验材料1. 计算机2. 数据处理软件(如SPSS、R等)3. 实验数据四、实验步骤1. 收集实验数据,确保两组数据相互独立。
2. 对两组数据进行排序,得到各自的秩。
3. 计算两组数据的秩和。
4. 根据秩和计算检验统计量。
5. 根据检验统计量查表得到临界值。
6. 判断两组数据是否来自同一总体。
五、实验结果与分析1. 数据描述本实验选取了两组独立样本,分别为样本A和样本B。
样本A包含10个数据,样本B包含10个数据。
两组数据如下:样本A:3, 5, 7, 8, 9, 10, 12, 13, 14, 15样本B:1, 4, 6, 7, 8, 9, 10, 11, 12, 132. 排序及秩计算将两组数据从小到大排序,得到各自的秩:样本A:1, 2, 3, 4, 5, 6, 7, 8, 9, 10样本B:1, 2, 3, 4, 5, 6, 7, 8, 9, 103. 秩和计算计算两组数据的秩和:样本A秩和:1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55样本B秩和:1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 554. 检验统计量及临界值计算检验统计量:T = |秩和A - 秩和B| / √[nA nB (nA + nB + 1) / 12]T = |55 - 55| / √[10 10 (10 + 10 + 1) / 12]T = 0查表得到临界值,以α = 0.05为例,查表得到临界值为1.98。
5. 判断结果由于计算得到的检验统计量T = 0小于临界值1.98,因此无法拒绝原假设,即两组数据来自同一总体。
数据结构与算法实验报告5-查找与排序
北京物资学院信息学院实验报告
课程名_数据结构与算法
实验名称查找与排序
实验日期年月日实验报告日期年月日姓名______ ___ 班级_____ ________ 学号___
一、实验目的
1.掌握线性表查找的方法;
2.了解树表查找思想;
3.掌握散列表查找的方法.
4.掌握插入排序、交换排序和选择排序的思想和方法;
二、实验内容
查找部分
1.实现顺序查找的两个算法(P307), 可以完成对顺序表的查找操作, 并根据查到和未查到两种情况输出结果;
2.实现对有序表的二分查找;
3.实现散列查找算法(链接法),应能够解决冲突;
排序部分
4.分别实现直接插入排序、直接选择排序、冒泡排序和快速排序算法
三、实验地点与环境
3.1 实验地点
3.2实验环境
(操作系统、C语言环境)
四、实验步骤
(描述实验步骤及中间的结果或现象。
在实验中做了什么事情, 怎么做的, 发生的现象和中间结果, 给出关键函数和主函数中的关键段落)
五、实验结果
六、总结
(说明实验过程中遇到的问题及解决办法;个人的收获;未解决的问题等)。
查找排序实验报告
查找排序实验报告一、实验目的本次实验的主要目的是深入理解和比较不同的查找和排序算法在性能和效率方面的差异。
通过实际编程实现和测试,掌握常见查找排序算法的原理和应用场景,为今后在实际编程中能够选择合适的算法解决问题提供实践经验。
二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。
计算机配置为:处理器_____,内存_____,操作系统_____。
三、实验内容1、查找算法顺序查找二分查找2、排序算法冒泡排序插入排序选择排序快速排序四、算法原理1、顺序查找顺序查找是一种最简单的查找算法。
它从数组的一端开始,依次比较每个元素,直到找到目标元素或者遍历完整个数组。
其时间复杂度为 O(n),在最坏情况下需要遍历整个数组。
2、二分查找二分查找适用于已排序的数组。
它通过不断将数组中间的元素与目标元素进行比较,将查找范围缩小为原来的一半,直到找到目标元素或者确定目标元素不存在。
其时间复杂度为 O(log n),效率较高。
3、冒泡排序冒泡排序通过反复比较相邻的两个元素并交换它们的位置,将最大的元素逐步“浮”到数组的末尾。
每次遍历都能确定一个最大的元素,经过 n-1 次遍历完成排序。
其时间复杂度为 O(n^2)。
4、插入排序插入排序将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的合适位置。
其时间复杂度在最坏情况下为 O(n^2),但在接近有序的情况下性能较好。
5、选择排序选择排序每次从待排序数组中选择最小的元素,与当前位置的元素交换。
经过 n-1 次选择完成排序。
其时间复杂度为 O(n^2)。
6、快速排序快速排序采用分治的思想,选择一个基准元素,将数组分为小于基准和大于基准两部分,然后对这两部分分别递归排序。
其平均时间复杂度为 O(n log n),在大多数情况下性能优异。
五、实验步骤1、算法实现使用Python 语言实现上述六种查找排序算法,并分别封装成函数,以便后续调用和测试。
图的搜索与应用实验报告(附源码)(word文档良心出品)
哈尔滨工业大学计算机科学与技术学院实验报告课程名称:数据结构与算法课程类型:必修实验项目名称:图的搜索与应用实验题目:图的深度和广度搜索与拓扑排序设计成绩报告成绩指导老师一、实验目的1.掌握图的邻接表的存储形式。
2.熟练掌握图的搜索策略,包括深度优先搜索与广度优先搜索算法。
3.掌握有向图的拓扑排序的方法。
二、实验要求及实验环境实验要求:1.以邻接表的形式存储图。
2.给出图的深度优先搜索算法与广度优先搜索算法。
3.应用搜索算法求出有向图的拓扑排序。
实验环境:寝室+机房+编程软件(NetBeans IDE 6.9.1)。
三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)数据类型定义:template <class T>class Node {//定义边public:int adjvex;//定义顶点所对应的序号Node *next;//指向下一顶点的指针int weight;//边的权重};template <class T>class Vnode {public:T vertex;Node<T> *firstedge;};template <class T>class Algraph {public:Vnode<T> adjlist[Max];int n;int e;int mark[Max];int Indegree[Max];};template<class T>class Function {public://创建有向图邻接表void CreatNalgraph(Algraph<T>*G);//创建无向图邻接表void CreatAlgraph(Algraph<T> *G);//深度优先递归搜索void DFSM(Algraph<T>*G, int i);void DFS(Algraph<T>* G);//广度优先搜索void BFS(Algraph<T>* G);void BFSM(Algraph<T>* G, int i);//有向图的拓扑排序void Topsort(Algraph<T>*G);/得到某个顶点内容所对应的数组序号int Judge(Algraph<T>* G, T name); };主程序流程图:程序开始调用关系:主函数调用五个函数 CreatNalgraph(G)//创建有向图 DFS(G) //深度优先搜索 BFS(G) //广度优先搜索 Topsort(G) //有向图拓扑排序 CreatAlgraph(G) //创建无向图其中 CreatNalgraph(G) 调用Judge(Algraph<T>* G, T name)函数;DFS(G)调用DFSM(Algraph<T>* G , int i)函数;BFS(G) 调用BFSM(Algraph<T>* G, int k)函数;CreatAlgraph(G) 调选择图的类型无向图有向图深 度 优 先 搜 索广度优先搜索 深 度 优 先 搜 索 广度优先搜索拓 扑 排 序程序结束用Judge(Algraph<T>* G, T name)函数。
排序的实验报告
排序的实验报告排序的实验报告引言:排序是计算机科学中常见的问题之一。
在实际应用中,我们经常需要对一组数据进行排序,以便更好地理解和分析数据。
本实验旨在比较不同排序算法的效率和性能,以及探讨它们在不同数据集上的表现。
实验设计:为了进行排序算法的比较,我们选择了五种常见的排序算法,分别是冒泡排序、选择排序、插入排序、快速排序和归并排序。
我们使用Python编程语言实现了这些算法,并在同一台计算机上运行它们以确保公平比较。
实验步骤:1. 数据集的准备我们选择了三种不同规模的数据集:小规模(100个元素)、中规模(1000个元素)和大规模(10000个元素)。
这些数据集包含了随机生成的整数。
2. 算法实现我们按照上述算法的描述,使用Python编程语言实现了这些排序算法。
为了确保准确性和效率,我们在实现过程中进行了多次测试和调试。
3. 实验运行我们分别对小规模、中规模和大规模的数据集运行这些排序算法,并记录下每个算法的运行时间。
实验结果:1. 小规模数据集排序结果对于小规模的数据集,所有的排序算法都能够在很短的时间内完成排序。
然而,快速排序和归并排序的运行时间明显短于冒泡排序、选择排序和插入排序。
2. 中规模数据集排序结果随着数据规模的增加,冒泡排序、选择排序和插入排序的运行时间显著增加,而快速排序和归并排序的运行时间仍然较短。
特别是在中规模数据集上,快速排序和归并排序的效率明显高于其他算法。
3. 大规模数据集排序结果在大规模数据集上,冒泡排序、选择排序和插入排序的运行时间急剧增加,而快速排序和归并排序的运行时间仍然保持在可接受的范围内。
这进一步证明了快速排序和归并排序的高效性。
讨论:通过对不同规模数据集的排序实验,我们可以得出以下结论:1. 快速排序和归并排序是最有效的排序算法,它们的运行时间相对较短。
2. 冒泡排序、选择排序和插入排序在小规模数据集上表现良好,但在大规模数据集上效率较低。
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<r[mid].key,则high=mid-1若key>r[mid].key,则low=mid+1重复上述操作,直至low>high时,查找失败b、顺序查找从表的一端开始逐个进行记录的关键字和给定值的比较。
在这里从表尾开始并把下标为0的作为哨兵。
void chaxun(SqList &ST) //查询信息{ cout<<"\n************************"<<endl;cout<<"~ (1)根据学号查询 ~"<<endl;cout<<"~ (2)根据姓名查询 ~"<<endl;cout<<"~ (3)根据性别查询 ~"<<endl;cout<<"~ (4)退出 ~"<<endl;cout<<"************************"<<endl; if(m==1) 折半查找算法:for(int i=1;i<ST.length;i++)//使学号变为有序for(int j=i;j>=1;j--)if(ST.r[j].xuehao<ST.r[j-1].xuehao){LI=ST.r[j];ST.r[j]=ST.r[j-1];ST.r[j-1]=LI;}int a=0;cout<<"输入要查找的学号"<<endl;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<<ST.r[mid].xuehao<<""<<ST.r[mid].xingming<<""<<ST.r[mid].xingbei<<""<<ST.r[mid].chengji1<<""<<ST.r[mid].chengji2<<""<<ST.r[mid].zong<<endl;a=1;break;}else if(n<ST.r[mid].xuehao )high=mid-1; // 继续在前半区间进行查找elselow=mid+1; // 继续在后半区间进行查找顺序查找算法:cout<<"输入要查找的姓名"<<endl;cin>>name;for(int i=0;i<ST.length;i++){if(name==ST.r[i].xingming){cout<<ST.r[i].xuehao<<""<<ST.r[i].xingming<<""<<ST.r[i].xingbei<<""<<ST.r[i].chengji1<<""<<ST.r[i].chengji2<<""<<ST.r[i].zong<<endl;a=1;}1、插入排序每步将一个待排序的记录,按其关键码大小,插入到前面已经排好序的一组记录的适当位置上,直到记录全部插入为止。
排序和查找的实验报告
排序和查找的实验报告实验报告:排序和查找引言排序和查找是计算机科学中非常重要的基本算法。
排序算法用于将一组数据按照一定的顺序排列,而查找算法则用于在已排序的数据中寻找特定的元素。
本实验旨在比较不同排序和查找算法的性能,并分析它们的优缺点。
实验设计为了比较不同排序算法的性能,我们选择了常见的几种排序算法,包括冒泡排序、插入排序、选择排序、快速排序和归并排序。
我们使用相同的随机数据集对这些算法进行了测试,并记录了它们的执行时间和占用空间。
在查找算法的比较实验中,我们选择了顺序查找和二分查找两种常见的算法。
同样地,我们使用相同的随机数据集对这些算法进行了测试,并记录了它们的执行时间和占用空间。
实验结果在排序算法的比较实验中,我们发现快速排序和归并排序在大多数情况下表现最好,它们的平均执行时间和空间占用都要优于其他排序算法。
而冒泡排序和插入排序则表现较差,它们的执行时间和空间占用相对较高。
在查找算法的比较实验中,二分查找明显优于顺序查找,尤其是在数据规模较大时。
二分查找的平均执行时间远远小于顺序查找,并且占用的空间也更少。
结论通过本实验的比较,我们得出了一些结论。
首先,快速排序和归并排序是较优的排序算法,可以在大多数情况下获得较好的性能。
其次,二分查找是一种高效的查找算法,特别适用于已排序的数据集。
最后,我们也发现了一些排序和查找算法的局限性,比如冒泡排序和插入排序在大数据规模下性能较差。
总的来说,本实验为我们提供了对排序和查找算法性能的深入了解,同时也为我们在实际应用中选择合适的算法提供了一定的参考。
希望我们的实验结果能够对相关领域的研究和应用有所帮助。
排序的应用实验报告
排序的应用实验报告实验题目:排序的应用实验一、实验目的:1. 了解排序算法的基本原理和应用场景;2. 掌握常见的排序算法的实现方法;3. 熟悉排序算法的时间复杂度分析;4. 在实际应用中灵活运用排序算法。
二、实验原理:排序是将一组数据按照某个规则进行重新排列的过程,常见的排序算法有冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序等。
每种排序算法有其特点和适用场景,掌握不同排序算法的实现方法和时间复杂度对于实际应用非常重要。
三、实验内容及步骤:1. 冒泡排序实验:a) 随机生成一组整数数据;b) 利用冒泡排序算法对数据进行排序;c) 输出排序结果,并统计排序过程中的比较次数和交换次数。
2. 选择排序实验:a) 随机生成一组整数数据;b) 利用选择排序算法对数据进行排序;c) 输出排序结果,并统计排序过程中的比较次数和交换次数。
3. 插入排序实验:a) 随机生成一组整数数据;b) 利用插入排序算法对数据进行排序;c) 输出排序结果,并统计排序过程中的比较次数和移动次数。
4. 归并排序实验:a) 随机生成一组整数数据;b) 利用归并排序算法对数据进行排序;c) 输出排序结果。
5. 快速排序实验:a) 随机生成一组整数数据;b) 利用快速排序算法对数据进行排序;c) 输出排序结果。
四、实验结果及分析:1. 冒泡排序实验结果:随机生成的一组整数数据为:[5, 3, 8, 2, 6]排序过程中的比较次数为:10排序过程中的交换次数为:4排序结果为:[2, 3, 5, 6, 8]2. 选择排序实验结果:随机生成的一组整数数据为:[5, 3, 8, 2, 6] 排序过程中的比较次数为:10排序过程中的交换次数为:4排序结果为:[2, 3, 5, 6, 8]3. 插入排序实验结果:随机生成的一组整数数据为:[5, 3, 8, 2, 6] 排序过程中的比较次数为:10排序过程中的移动次数为:7排序结果为:[2, 3, 5, 6, 8]4. 归并排序实验结果:随机生成的一组整数数据为:[5, 3, 8, 2, 6] 排序结果为:[2, 3, 5, 6, 8]5. 快速排序实验结果:随机生成的一组整数数据为:[5, 3, 8, 2, 6]排序结果为:[2, 3, 5, 6, 8]五、实验总结:通过本次实验,我对常见的排序算法有了更深入的了解。
排序实验报告
实验五排序实验目的: 掌握几种排序的思想及算法问题分析:(一)直接插入排序1. 排序思想将待排序的记录Ri,插入到已排好序的记录表R1, R2 ,…., Ri-1中,得到一个新的、记录数增加1的有序表。
直到所有的记录都插入完为止。
设待排序的记录顺序存放在数组R[1…n]中,在排序的某一时刻,将记录序列分成两部分:◆R[1…i-1]:已排好序的有序部分;◆R[i…n]:未排好序的无序部分。
显然,在刚开始排序时,R[1]是已经排好序的。
2 . 算法实现void straight_insert_sort(Sqlist R){ int i, j ;for (i=2; i<=n; i++){ R[0]=R[i]; j=i-1; /*设置哨兵*/while( LT(R[0].key, R[j].key) ){ R[j+1]=R[j];j--;} /* 查找插入位置*/R[j+1]=R[0]; /* 插入到相应位置*/}}(二)希尔排序1. 排序思想①先取一个正整数d1(d1<n)作为第一个增量,将全部n个记录分成d1组,把所有相隔d1的记录放在一组中,即对于每个k(k=1, 2, … d1),R[k], R[d1+k], R[2d1+k] , …分在同一组中,在各组内进行直接插入排序。
这样一次分组和排序过程称为一趟希尔排序;②取新的增量d2<d1,重复①的分组和排序操作;直至所取的增量di=1为止,即所有记录放进一个组中排序为止。
2. 算法实现先给出一趟希尔排序的算法,类似直接插入排序。
void shell_pass(Sqlist R, int d)/* 对顺序表L进行一趟希尔排序, 增量为d */{ int j, k ;for (j=d+1; j<=n; j++){ R[0]=R[j] ; /* 设置监视哨兵*/k=j-d ;while (k>0&<(R[0].key, R[k].key) ){ R[k+d]=R[k] ; k=k-d ; }R[k+d]=R[0] ;}}然后在根据增量数组dk进行希尔排序。
数据结构实验报告排序
数据结构实验报告排序数据结构实验报告:排序引言:排序是计算机科学中常见的算法问题之一,它的目标是将一组无序的数据按照特定的规则进行排列,以便于后续的查找、统计和分析。
在本次实验中,我们将学习和实现几种常见的排序算法,并对它们的性能进行比较和分析。
一、冒泡排序冒泡排序是最简单的排序算法之一,它通过不断交换相邻的元素,将较大(或较小)的元素逐渐“冒泡”到数组的一端。
具体实现时,我们可以使用两层循环来比较和交换元素,直到整个数组有序。
二、插入排序插入排序的思想是将数组分为两个部分:已排序部分和未排序部分。
每次从未排序部分中取出一个元素,插入到已排序部分的适当位置,以保持已排序部分的有序性。
插入排序的实现可以使用一层循环和适当的元素交换。
三、选择排序选择排序每次从未排序部分中选择最小(或最大)的元素,与未排序部分的第一个元素进行交换。
通过不断选择最小(或最大)的元素,将其放置到已排序部分的末尾,从而逐渐形成有序序列。
四、快速排序快速排序是一种分治的排序算法,它通过选择一个基准元素,将数组划分为两个子数组,其中一个子数组的所有元素都小于等于基准元素,另一个子数组的所有元素都大于基准元素。
然后对两个子数组分别递归地进行快速排序,最终将整个数组排序。
五、归并排序归并排序也是一种分治的排序算法,它将数组划分为多个子数组,对每个子数组进行排序,然后再将排好序的子数组合并成一个有序的数组。
归并排序的实现可以使用递归或迭代的方式。
六、性能比较与分析在本次实验中,我们对以上几种排序算法进行了实现,并通过对不同规模的随机数组进行排序,比较了它们的性能。
我们使用了计算排序时间的方式,并记录了每种算法在不同规模下的运行时间。
通过对比实验结果,我们可以得出以下结论:1. 冒泡排序和插入排序在处理小规模数据时表现较好,但在处理大规模数据时性能较差,因为它们的时间复杂度为O(n^2)。
2. 选择排序的时间复杂度也为O(n^2),与冒泡排序和插入排序相似,但相对而言,选择排序的性能稍好一些。
查找排序实验报告总结
一、实验目的本次实验旨在通过编写程序实现查找和排序算法,掌握基本的查找和排序方法,了解不同算法的优缺点,提高编程能力和数据处理能力。
二、实验内容1. 查找算法本次实验涉及以下查找算法:顺序查找、二分查找、插值查找。
(1)顺序查找顺序查找算法的基本思想是从线性表的第一个元素开始,依次将线性表中的元素与要查找的元素进行比较,若找到相等的元素,则查找成功;若线性表中所有的元素都与要查找的元素进行了比较但都不相等,则查找失败。
(2)二分查找二分查找算法的基本思想是将待查找的元素与线性表中间位置的元素进行比较,若中间位置的元素正好是要查找的元素,则查找成功;若要查找的元素比中间位置的元素小,则在线性表的前半部分继续查找;若要查找的元素比中间位置的元素大,则在线性表的后半部分继续查找。
重复以上步骤,直到找到要查找的元素或查找失败。
(3)插值查找插值查找算法的基本思想是根据要查找的元素与线性表中元素的大小关系,估算出要查找的元素应该在大致的位置,然后从这个位置开始进行查找。
2. 排序算法本次实验涉及以下排序算法:冒泡排序、选择排序、插入排序、快速排序。
(1)冒泡排序冒泡排序算法的基本思想是通过比较相邻的元素,将较大的元素交换到后面,较小的元素交换到前面,直到整个线性表有序。
(2)选择排序选择排序算法的基本思想是在未排序的序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
以此类推,直到所有元素均排序完毕。
(3)插入排序插入排序算法的基本思想是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增加1的有序表。
(4)快速排序快速排序算法的基本思想是选择一个元素作为基准元素,将线性表分为两个子表,一个子表中所有元素均小于基准元素,另一个子表中所有元素均大于基准元素,然后递归地对两个子表进行快速排序。
三、实验结果与分析1. 查找算法通过实验,我们发现:(1)顺序查找算法的时间复杂度为O(n),适用于数据量较小的线性表。
排序查找实验报告
排序查找实验报告排序查找实验报告一、引言排序和查找是计算机科学中非常重要的基础算法。
排序算法可以将一组无序的数据按照某种规则重新排列,而查找算法则可以在大量数据中快速找到目标元素。
本实验旨在通过实际操作和观察,对比不同的排序和查找算法的性能和效果,以便更好地理解和应用这些算法。
二、实验目的本实验的主要目的有以下几点:1. 理解不同排序算法的原理和特点;2. 掌握不同排序算法的实现方法;3. 比较不同排序算法之间的性能差异;4. 理解不同查找算法的原理和特点;5. 掌握不同查找算法的实现方法;6. 比较不同查找算法之间的性能差异。
三、实验过程1. 排序算法实验在排序算法实验中,我们选择了冒泡排序、选择排序和快速排序三种常见的排序算法进行比较。
首先,我们编写了一个随机生成一组无序数据的函数,并将其作为排序算法的输入。
然后,分别使用冒泡排序、选择排序和快速排序对这组数据进行排序,并记录下每种算法的执行时间。
最后,我们比较了三种算法的执行效率和排序结果的准确性。
2. 查找算法实验在查找算法实验中,我们选择了顺序查找、二分查找和哈希查找三种常见的查找算法进行比较。
首先,我们编写了一个生成有序数据的函数,并将其作为查找算法的输入。
然后,分别使用顺序查找、二分查找和哈希查找对这组数据进行查找,并记录下每种算法的执行时间。
最后,我们比较了三种算法的执行效率和查找结果的准确性。
四、实验结果1. 排序算法实验结果经过实验比较,我们发现快速排序算法在大多数情况下具有最好的性能表现,其平均时间复杂度为O(nlogn)。
冒泡排序算法虽然简单,但其时间复杂度为O(n^2),在数据量较大时效率较低。
选择排序算法的时间复杂度也为O(n^2),但相对于冒泡排序,其交换次数较少,因此效率稍高。
2. 查找算法实验结果顺序查找算法是最简单的一种查找算法,其时间复杂度为O(n),适用于小规模数据的查找。
二分查找算法的时间复杂度为O(logn),适用于有序数据的查找。
小学排序的实验报告
一、实验背景随着我国教育改革的不断深入,小学数学教学也在不断创新。
排序是小学数学中的一项基本技能,它有助于培养学生的逻辑思维能力和观察力。
为了探讨如何提高小学生排序能力,我们开展了一次小学排序实验。
二、实验目的1. 探究不同排序方法对小学生排序能力的影响。
2. 分析小学生排序过程中的常见问题及原因。
3. 寻求提高小学生排序能力的有效策略。
三、实验对象与材料实验对象:某小学四年级全体学生(共50人)实验材料:排序卡片(包含数字、字母、图形等)、计时器、记录表等。
四、实验方法1. 实验分组:将实验对象随机分为A、B、C三个小组,每组17人。
2. 实验步骤:(1)A组:采用直接排序法,让学生按照卡片上的数字、字母、图形等进行排序。
(2)B组:采用对比排序法,让学生在卡片上找出相同或相近的元素进行排序。
(3)C组:采用逻辑推理排序法,引导学生根据规律进行排序。
3. 实验记录:记录每个小组学生在排序过程中的用时、正确率、错误类型等数据。
五、实验结果与分析1. 实验结果(1)A组:平均用时10分钟,正确率80%,错误类型为数字、字母、图形混淆。
(2)B组:平均用时8分钟,正确率90%,错误类型为对比错误。
(3)C组:平均用时7分钟,正确率95%,错误类型为逻辑推理错误。
2. 实验分析(1)不同排序方法对小学生排序能力的影响:对比排序法和逻辑推理排序法在提高小学生排序能力方面效果较好,正确率较高;直接排序法效果较差,正确率较低。
(2)小学生排序过程中的常见问题及原因:①对数字、字母、图形等元素混淆;②对比错误;③逻辑推理能力不足。
六、实验结论1. 采用对比排序法和逻辑推理排序法可以有效提高小学生的排序能力。
2. 在小学数学教学中,教师应注重培养学生的逻辑思维能力和观察力,提高学生的排序能力。
3. 针对小学生排序过程中的常见问题,教师应采取针对性的教学策略,提高学生的排序能力。
七、实验建议1. 教师在教学中,应根据学生的实际情况,选择合适的排序方法。
【精编范文】快速排序算法实验报告-范文word版 (17页)
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==快速排序算法实验报告篇一:快速排序( 实验报告附C++源码)快速排序一、问题描述在操作系统中,我们总是希望以最短的时间处理完所有的任务。
但事情总是要一件件地做,任务也要操作系统一件件地处理。
当操作系统处理一件任务时,其他待处理的任务就需要等待。
虽然所有任务的处理时间不能降低,但我们可以安排它们的处理顺序,将耗时少的任务先处理,耗时多的任务后处理,这样就可以使所有任务等待的时间和最小。
只需要将n 件任务按用时去从小到大排序,就可以得到任务依次的处理顺序。
当有 n 件任务同时来临时,每件任务需要用时ni,求让所有任务等待的时间和最小的任务处理顺序。
二、需求分析1. 输入事件件数n,分别随机产生做完n件事所需要的时间;2. 对n件事所需的时间使用快速排序法,进行排序输出。
排序时,要求轴值随机产生。
3. 输入输出格式:输入:第一行是一个整数n,代表任务的件数。
接下来一行,有n个正整数,代表每件任务所用的时间。
输出:输出有n行,每行一个正整数,从第一行到最后一行依次代表着操作系统要处理的任务所用的时间。
按此顺序进行,则使得所有任务等待时间最小。
4. 测试数据:输入95 3 4 26 1 57 3 输出1 2 3 3 4 5 5 6 7三、概要设计抽象数据类型因为此题不需要存储复杂的信息,故只需一个整型数组就可以了。
算法的基本思想对一个给定的进行快速排序,首先需要选择一个轴值,假设输入的数组中有k 个小于轴值的数,于是这些数被放在数组最左边的k个位置上,而大于周知的结点被放在数组右边的n-k个位置上。
k也是轴值的下标。
这样k把数组分成了两个子数组。
分别对两个子数组,进行类似的操作,便能得到正确的排序结果。
程序的流程输入事件件数n-->随机产生做完没个事件所需时间-->对n个时间进行排序-->输出结果快速排序方法(因图难画,举一个实例):初始状态 72 6 57 88 85 42 l r 第一趟循环 72 6 57 88 85 42 l r 第一次交换 6 72 57 88 85 42 l r 第二趟循环 6 72 57 88 85 42 r l 第二次交换 72 6 57 88 85 42 r l反转交换 6 72 57 88 85 42 r l这就是依靠轴值,将数组分成两部分的实例(特殊情况下,可能为一部分,其中42是轴值)。
查找和排序 实验报告
查找和排序实验报告查找和排序实验报告一、引言查找和排序是计算机科学中非常重要的基础算法之一。
查找(Search)是指在一组数据中寻找目标元素的过程,而排序(Sort)则是将一组数据按照特定的规则进行排列的过程。
本实验旨在通过实际操作和实验验证,深入理解查找和排序算法的原理和应用。
二、查找算法实验1. 顺序查找顺序查找是最简单的查找算法之一,它的基本思想是逐个比较待查找元素与数据集合中的元素,直到找到目标元素或遍历完整个数据集合。
在本实验中,我们设计了一个包含1000个随机整数的数据集合,并使用顺序查找算法查找指定的目标元素。
实验结果显示,顺序查找的时间复杂度为O(n)。
2. 二分查找二分查找是一种高效的查找算法,它要求待查找的数据集合必须是有序的。
二分查找的基本思想是通过不断缩小查找范围,将待查找元素与中间元素进行比较,从而确定目标元素的位置。
在本实验中,我们首先对数据集合进行排序,然后使用二分查找算法查找指定的目标元素。
实验结果显示,二分查找的时间复杂度为O(log n)。
三、排序算法实验1. 冒泡排序冒泡排序是一种简单但低效的排序算法,它的基本思想是通过相邻元素的比较和交换,将较大(或较小)的元素逐渐“冒泡”到数列的一端。
在本实验中,我们设计了一个包含1000个随机整数的数据集合,并使用冒泡排序算法对其进行排序。
实验结果显示,冒泡排序的时间复杂度为O(n^2)。
2. 插入排序插入排序是一种简单且高效的排序算法,它的基本思想是将数据集合分为已排序和未排序两部分,每次从未排序部分选择一个元素插入到已排序部分的适当位置。
在本实验中,我们使用插入排序算法对包含1000个随机整数的数据集合进行排序。
实验结果显示,插入排序的时间复杂度为O(n^2)。
3. 快速排序快速排序是一种高效的排序算法,它的基本思想是通过递归地将数据集合划分为较小和较大的两个子集合,然后对子集合进行排序,最后将排序好的子集合合并起来。
排序查找实验报告总结
一、实验目的本次实验旨在通过实际操作,加深对排序和查找算法的理解,掌握几种常见的排序和查找方法,提高编程能力,并了解它们在实际应用中的优缺点。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容1. 排序算法(1)冒泡排序冒泡排序是一种简单的排序算法,基本思想是通过相邻元素的比较和交换,逐步将较大的元素移动到序列的后面,较小的元素移动到序列的前面,直到整个序列有序。
(2)选择排序选择排序是一种简单直观的排序算法,基本思想是遍历整个序列,每次从剩余未排序的元素中找到最小(或最大)的元素,将其与未排序序列的第一个元素交换,然后继续在剩余未排序的元素中寻找最小(或最大)的元素。
(3)插入排序插入排序是一种简单直观的排序算法,基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加1的有序表。
(4)快速排序快速排序是一种效率较高的排序算法,基本思想是选取一个基准值,将待排序序列分为两个子序列,一个子序列中所有元素都比基准值小,另一个子序列中所有元素都比基准值大,然后递归地对两个子序列进行快速排序。
2. 查找算法(1)顺序查找顺序查找是一种最简单的查找算法,基本思想是从线性表的第一个元素开始,依次将线性表中的元素与要查找的元素进行比较,若相等,则查找成功;若线性表中所有元素都与要查找的元素不相等,则查找失败。
(2)二分查找二分查找是一种效率较高的查找算法,基本思想是对于有序的线性表,通过将待查找元素与线性表中间的元素进行比较,逐步缩小查找范围,直到找到目标元素或查找失败。
四、实验结果与分析1. 排序算法分析(1)冒泡排序:时间复杂度为O(n^2),空间复杂度为O(1),稳定排序。
(2)选择排序:时间复杂度为O(n^2),空间复杂度为O(1),不稳定排序。
(3)插入排序:时间复杂度为O(n^2),空间复杂度为O(1),稳定排序。
算法实验报告_排序
一、实验背景排序是计算机科学中常见的基本操作,对于数据结构的学习和运用具有重要意义。
本实验旨在通过实现几种常见的排序算法,比较它们的性能,并分析它们的适用场景。
二、实验目的1. 熟悉几种常见的排序算法。
2. 比较不同排序算法的执行时间和稳定性。
3. 分析不同排序算法的适用场景。
三、实验内容1. 选择排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序。
2. 实现排序算法。
3. 生成随机数组和有序数组,分别对两种数组进行排序。
4. 记录每种排序算法的执行时间和稳定性。
5. 分析不同排序算法的性能。
四、实验步骤1. 实现排序算法(1)冒泡排序冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
```pythondef bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]```(2)选择排序选择排序是一种简单直观的排序算法。
它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
以此类推,直到所有元素均排序完毕。
```pythondef selection_sort(arr):n = len(arr)for i in range(n):min_idx = ifor j in range(i+1, n):if arr[min_idx] > arr[j]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i]```(3)插入排序插入排序是一种简单直观的排序算法。
它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
查找与排序实验报告
查找与排序实验报告《查找与排序实验报告》摘要:本实验旨在通过不同的查找与排序算法对比分析它们的效率和性能。
我们使用了常见的查找算法包括线性查找、二分查找和哈希查找,以及排序算法包括冒泡排序、快速排序和归并排序。
通过实验数据的对比分析,我们得出了每种算法的优缺点和适用场景,为实际应用提供了参考依据。
1. 实验目的通过实验对比不同查找与排序算法的性能,分析它们的优缺点和适用场景。
2. 实验方法(1)查找算法实验:分别使用线性查找、二分查找和哈希查找算法,对含有一定数量元素的数组进行查找操作,并记录比较次数和查找时间。
(2)排序算法实验:分别使用冒泡排序、快速排序和归并排序算法,对含有一定数量元素的数组进行排序操作,并记录比较次数和排序时间。
3. 实验结果(1)查找算法实验结果表明,二分查找在有序数组中的查找效率最高,哈希查找在大规模数据中的查找效率最高。
(2)排序算法实验结果表明,快速排序在平均情况下的排序效率最高,归并排序在最坏情况下的排序效率最高。
4. 实验分析通过实验数据的对比分析,我们得出了以下结论:(1)查找算法:二分查找适用于有序数组的查找,哈希查找适用于大规模数据的查找。
(2)排序算法:快速排序适用于平均情况下的排序,归并排序适用于最坏情况下的排序。
5. 结论不同的查找与排序算法在不同的场景下有着不同的性能表现,选择合适的算法可以提高程序的效率和性能。
本实验为实际应用提供了参考依据,对算法的选择和优化具有一定的指导意义。
通过本次实验,我们深入了解了不同查找与排序算法的原理和性能,为今后的算法设计和优化工作提供了宝贵的经验和参考。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验七查找、排序的应用一、实验目的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<r[mid].key,则high=mid-1若key>r[mid].key,则low=mid+1重复上述操作,直至low>high时,查找失败b、顺序查找从表的一端开始逐个进行记录的关键字和给定值的比较。
在这里从表尾开始并把下标为0的作为哨兵。
void chaxun(SqList &ST) //查询信息{ cout<<"\n************************"<<endl;cout<<"~ (1)根据学号查询 ~"<<endl;cout<<"~ (2)根据姓名查询 ~"<<endl;cout<<"~ (3)根据性别查询 ~"<<endl;cout<<"~ (4)退出 ~"<<endl;cout<<"************************"<<endl; if(m==1) 折半查找算法:for(int i=1;i<ST.length;i++)//使学号变为有序for(int j=i;j>=1;j--)if(ST.r[j].xuehao<ST.r[j-1].xuehao){LI=ST.r[j];ST.r[j]=ST.r[j-1];ST.r[j-1]=LI;}int a=0;cout<<"输入要查找的学号"<<endl;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<<ST.r[mid].xuehao<<""<<ST.r[mid].xingming<<""<<ST.r[mid].xingbei<<""<<ST.r[mid].chengji1<<""<<ST.r[mid].chengji2<<""<<ST.r[mid].zong<<endl;a=1;break;}else if(n<ST.r[mid].xuehao )high=mid-1; // 继续在前半区间进行查找elselow=mid+1; // 继续在后半区间进行查找顺序查找算法:cout<<"输入要查找的姓名"<<endl;cin>>name;for(int i=0;i<ST.length;i++){if(name==ST.r[i].xingming){cout<<ST.r[i].xuehao<<""<<ST.r[i].xingming<<""<<ST.r[i].xingbei<<""<<ST.r[i].chengji1<<""<<ST.r[i].chengji2<<""<<ST.r[i].zong<<endl;a=1;}1、插入排序每步将一个待排序的记录,按其关键码大小,插入到前面已经排好序的一组记录的适当位置上,直到记录全部插入为止。
//按学号排序,使用插入排序RecordType LI; //定义存储学号向量for(int i=1;i<ST.length;i++)for(int j=i;j>=1;j--)if(ST.r[j].xuehao<ST.r[j-1].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<ST.length;i++)for (int j=i+1;j<ST.length;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 <iostream>using namespace std;#include <string>#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<<"输入学生个数"<<endl;cin>>ST.length;for(int i=0;i<ST.length;i++){cout<<"输入第"<<i+1<<"学生的信息"<<endl;cout<<"学号"<<endl;cin>>ST.r[i].xuehao;cout<<"姓名"<<endl;cin>>ST.r[i].xingming;cout<<"性别"<<endl;cin>>ST.r[i].xingbei;cout<<"成绩1"<<endl;cin>>ST.r[i].chengji1;cout<<"成绩2"<<endl;cin>>ST.r[i].chengji2;}cout<<"输入完毕"<<endl;}void zong(SqList &ST) //计算总分{for(int i=0;i<ST.length;i++){ST.r[i].zong=ST.r[i].chengji1+ST.r[i].chengji2;}}void shuchu(SqList &ST)//输出{cout<<"学生的信息如下"<<endl;cout<<"学号姓名性别成绩1 成绩2 总分 "<<endl;for(int i=0;i<ST.length;i++){cout<<ST.r[i].xuehao<<" "<<ST.r[i].xingming<<" "<<ST.r[i].xingbei<<" "<<ST.r[i].chengji1<<""<<ST.r[i].chengji2<<" " <<ST.r[i].zong<<" "<<endl;}}void chaxun(SqList &ST) //查询信息{l1: cout<<endl;cout<<"(1)根据学号查询"<<endl;cout<<"(2)根据姓名查询"<<endl;cout<<"(3)根据性别查询"<<endl;cout<<"(4)退出"<<endl;int n,m;string name;string xb;cin>>m;if(m==1) //折半查找{RecordType LI; //使学号变为有序for(int i=1;i<ST.length;i++)for(int j=i;j>=1;j--)if(ST.r[j].xuehao<ST.r[j-1].xuehao){LI=ST.r[j];ST.r[j]=ST.r[j-1];ST.r[j-1]=LI;}l2: int a=0;cout<<"输入要查找的学号"<<endl;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<<ST.r[mid].xuehao<<" "<<ST.r[mid].xingming<<" "<<ST.r[mid].xingbei<<" "<<ST.r[mid].chengji1<<" "<<ST.r[mid].chengji2<<" "<<ST.r[mid].zong<<endl;a=1;break;}else if(n<ST.r[mid].xuehao )high=mid-1; // 继续在前半区间进行查找elselow=mid+1; // 继续在后半区间进行查找}if(!a){cout<<"所查信息不存在!"<<endl;cout<<"请重新输入"<<endl;goto l2;}goto l1;}if(m==2) //顺序查找{l3: int a=0;cout<<"输入要查找的姓名"<<endl;cin>>name;for(int i=0;i<ST.length;i++){if(name==ST.r[i].xingming){cout<<ST.r[i].xuehao<<" "<<ST.r[i].xingming<<" "<<ST.r[i].xingbei<<" "<<ST.r[i].chengji1<<" "<<ST.r[i].chengji2<<" "<<ST.r[i].zong<<endl;a=1;}}if(!a){cout<<"所查信息不存在!"<<endl;cout<<"请重新输入"<<endl;goto l3;}goto l1;}if(m==3) //顺序查找{l4: int a=0;cout<<"输入要查找性别"<<endl;cin>>xb;for(int i=0;i<ST.length;i++){if(xb==ST.r[i].xingbei){cout<<ST.r[i].xuehao<<" "<<ST.r[i].xingming<<" "<<ST.r[i].xingbei<<" "<<ST.r[i].chengji1<<" "<<ST.r[i].chengji2<<" "<<ST.r[i].zong<<endl;a=1;}}if(!a){cout<<"所查信息不存在!"<<endl;cout<<"请重新输入"<<endl;goto l4;}goto l1;}if(m==4){caidan(ST);}}void paixu(SqList &ST) //排序{l1: int n;cout<<endl;cout<<"(1)根据学号排序"<<endl;cout<<"(2)根据成绩1排序"<<endl;cout<<"(3)根据成绩2排序"<<endl;cout<<"(4)根据总成绩排序"<<endl;cout<<"(5)退出";cout<<endl;cin>>n;if(n==1) //按学号排序,使用插入排序{RecordType LI; //定义存储学号向量for(int i=1;i<ST.length;i++)for(int j=i;j>=1;j--)if(ST.r[j].xuehao<ST.r[j-1].xuehao){LI=ST.r[j];ST.r[j]=ST.r[j-1];ST.r[j-1]=LI;}shuchu(ST);cout<<"排序完毕"<<endl;goto l1;}if(n==2) //按成绩1排序,用选择排序{RecordType LI;for(int i=0; i<ST.length;i++)for (int j=i+1;j<ST.length;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<<"排序完毕"<<endl;goto l1;}if(n==3) // 根据成绩2排序,使用选择法排序{RecordType LI;for(int i=0; i<ST.length;i++)for (int j=i+1;j<ST.length;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<<"排序完毕"<<endl;goto l1;}if(n==4) //根据总成绩排序,使用选择法排序{RecordType LI;for(int i=0; i<ST.length;i++)for (int j=i+1;j<ST.length;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<<"排序完毕"<<endl;goto l1;}if(n==5) //退出{caidan(ST);}}void caidan(SqList &ST)//选择菜单{cout<<"请选择要进入的模块"<<endl;cout<<"(1)查询"<<endl;cout<<"(2)排序"<<endl;cout<<"(3)退出"<<endl;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);}。