1、1. 验证实验1(折半查找) 31.1 实验目的 31.2 实验内容 31.3 算法思想、总体设计 31.4 算法设计 41.5 算法代码实现 51.6 代码测试 62. 验证实验2 (简单选择排序算法验证) 82.1 实验目的 82.2 实验内容 82.3 算法思想、总体设计 82.4 算法设计 82.5 算法代码实现 102.6 代码测试 113. 实验设计1 (直接插入排序基于单链表的实现) 133.1 实验目的 133.2 实验内容 133.3 算法思想、总体设计 133.4 算法设计 133.5 算法代码实现 153.6 代码测试 153.7 测试总结 17第三部分: 心得体会 17
2、分工角色参与人员完成任务简单描述姓名/学号联系方式项目经理略实验项目选择,实验进度把控;整体设计对整体流程进行设计,并设计整个实验所用的数据结构;算法设计对各种操作进行算法设计;代码编写根据算法进行编码及调试;测试对程序执行过程及结果进行测试;文档编写实验报告。实验报告1. 验证实验1(折半查找)1.1 实验目的1.1.1 掌握折半查找算法的基本思想;1.1.2 掌握折半查找算法的实现方法;1.1.3 掌握折半查找算法的时间性能。1.2 实验内容1.2.1 根据输入长度,生成一个升序排列的顺序表1.2.2 根据输入要查找的值,使用折半查找法(也叫二分查找法),使用递归算法进行查找。1.2.3
3、查询结果返回所在位置序号1.3 算法思想、总体设计1.3.1 结合同期课程,决定选用C#作为实验的工具语言。1.3.2 折半查找的操作对象为有序的顺序表,所以在试验中生成一个有序的数组作为实验对象。1.3.3 折半查找的算法思想是,将数列按有序化(递增或递减)排列,查找过程中先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元素必须有序。1.3.4 时间复杂度为O(log2n)1.3.5 折半查
4、找一般有3中算法,一般算法、递归算法、迭代算法,试验中选用递归算法作为实现方法。1.4 算法设计1.4.1 数据结构设计折半查找的对象要求是有序的顺序表,所以实验对象定义为一个有序的数组。/定义一个int型的数组,长度size由界面输入list1 = new intsize1.4.2 算法执行流程图1.4.2.1 顺序表的建立 1.4.2.2 折半查找算法(递归) 递归执行 否 是1.5 算法代码实现/初始化顺序表 public string initiatelist(int size) /size传递来的顺序表长度参数 string t = ; /把生成的顺序表返回至text中显示 list
5、1 = new intsize; int i; for (i = 0; i size; i+) /用循环生成升序的顺序表 list1i = i; if (i = size - 1) t = t + list1i.ToString(); else t = t + list1i.ToString() + , return (t);/对顺序表进行折半查找,使用递归算法/分别传递 r 数组首地址,low 查询的左边界,high 查询的右边界,key 所需查找的值 public string findsearch(int r, int low, int high, int Key) int mid =
6、(low + high) / 2; if (low high) if (Key = rmid) return findsearch(r, low, mid, Key); /递归执行 return findsearch(r, mid + 1, high, Key); else if (low = high) if (Key = rmid) return (low + 1).ToString(); /返回找到值的位置,比数组序号+1 return (无此数据!);1.6 代码测试1.6.1 测试方法采用黑盒测试方法进行测试1.6.2 测试数据准备着重准备数组首末边界的值以及不符合条件的值进行查找,
7、尽量试图发现bug错误。1.6.3 测试过程1 测试准备1) 输入所需顺序表长度2) 点击【生成有序数组】3) 返回生成的有序数组2 折半查找测试1) 输入要查找的值2) 点击【折半查找】按钮3) 在查找结果中核对结果1.6.4 测试总结测试的结果符合设计要求,测试了各种边界数据,都符合设计要求,没有出现任何错误。响应速度也符合算法的时间复杂度,没有出现速度慢等情况。2. 验证实验2 (简单选择排序算法验证)2.1 实验目的2.1.1 掌握简单选择排序算法的基本思想.2.1.2 掌握简单选择排序算法的实现方法.2.1.3 验证简单选择排序算法的时间性能.2.2 实验内容2.2.1 对一组数据进
8、行简单选择排序(按升序排列)2.2.2 为了更好理解单链表,这个实验使用单链表模型来操作。2.2.3 对无序的单链表进行选择排序(升序)2.3 算法思想、总体设计2.3.1 结合同期课程,决定选用C#作为实验的工具语言。2.3.2 采用单链表进行排序操作。2.3.3 简单选择排序的基本思想:对待排序的序列进行若干趟处理,通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录和第i(1in)个记录进行交换,这样一趟处理就能确定一个数的位置,对n个数如果确定n-1个数的位置,则这n个数就排序成功。2.3.4 选择排序的算法的时间复杂度为 O(n2)。并且排序是稳定的2.4 算法设计2.
9、4.1 数据结构设计使用一个单链表作为选择排序的操作对象/单链表结构体定义 class SingleLink private int idata; public int Data get return idata; set idata = value; public SingleLink next; public SingleLink() idata = -1; next = null; public SingleLink(int data) idata = data;2.4.2 算法执行流程图2.4.2.1 初始化单链表2.4.2.2 简单选择排序i+2.5 算法代码实现2.5.1 单链表初
10、始化Random r = new Random(); /从1-100之间产生数 list.clear(); /单链表清空 for (int i = 0; dlblong; i+) /根据所需长度,循环插入单链表节点 list.Insert(r.Next(100); /节点插入操作 f+; textBox1.Text = list.Display(); /返回整个单链表显示2.5.2 单链表选择排序 y = head; flag = head.next; int n = 0, i, j, temp = 0, biaoji; y = head.next; p = head.next; q = he
11、ad.next; n - 1; i+) /第一层循环 flag = p; q = p; biaoji = q.Data; for (j = i; j j+) if (q.next.Data biaoji) /内循环查找出未排序中的最小值 flag = q.next; biaoji = q.next.Data; q = q.next; temp = p.Data; /数据交换 p.Data = flag.Data; flag.Data = temp; p = p.next; return (true);2.6 代码测试2.6.1 测试方法2.6.2 测试数据准备各种排序方式下的排序结果情况,主要
12、检查单链表指针是否有错误定位2.6.3 测试过程1) 输入所需单链表长度2) 点击【随机生成单链表】3) 返回生成的单链表结果4) 点击【选择排序】按钮5) 在结果序列中,显示排序完成后的单链表生成单链表选择排序并显示结果2.7 测试总结测试的结果符合设计要求,多次生成不同长度的单链表,进行选择排序后所有结果都符合设计要求,没有出现任何单链表操作容易产生的指针溢出等问题。软件运行正常。3. 实验设计1 (直接插入排序基于单链表的实现)3.1 实验目的3.1.1 熟悉单链表的生成、插入、删除等操作3.1.2 熟悉基于单链表的直接插入算法3.1.3 熟悉使用指针交换单链表位置的方法3.2 实验内容3.2.1 单链表的生成、删除、插入等操作3.2.2 对无需单链表使用直接插入排序3.2.3 对无序的单链表进行选择排序(升序)3.3 算法思想、总体设计3.3.1 结合同期课程,决定选用C#作为实验的工具语言。3.3.2 直接插入算法过程藐视,将单链表划分为有序区和无序区,有序区只包含一个元素结点,依次取无序区中的每一个结点,在有序区中查找待插入结点的插入位置
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1