报告上海交通大学网络教育课程Word格式.docx
《报告上海交通大学网络教育课程Word格式.docx》由会员分享,可在线阅读,更多相关《报告上海交通大学网络教育课程Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
![报告上海交通大学网络教育课程Word格式.docx](https://file1.bdocx.com/fileroot1/2022-10/9/bd1e599b-5890-432c-aeb6-e2967a43501e/bd1e599b-5890-432c-aeb6-e2967a43501e1.gif)
1.验证实验1(折半查找)3
1.1实验目的3
1.2实验内容3
1.3算法思想、总体设计3
1.4算法设计4
1.5算法代码实现5
1.6代码测试6
2.验证实验2(简单选择排序算法验证)8
2.1实验目的8
2.2实验内容8
2.3算法思想、总体设计8
2.4算法设计8
2.5算法代码实现10
2.6代码测试11
3.实验设计1(直接插入排序基于单链表的实现)13
3.1实验目的13
3.2实验内容13
3.3算法思想、总体设计13
3.4算法设计13
3.5算法代码实现15
3.6代码测试15
3.7测试总结17
第三部分:
心得体会17
分工
角色
参与人员
完成任务简单描述
姓名/学号
联系方式
项目经理
略
实验项目选择,实验进度把控;
整体设计
对整体流程进行设计,并设计整个实验所用的数据结构;
算法设计
对各种操作进行算法设计;
代码编写
根据算法进行编码及调试;
测试
对程序执行过程及结果进行测试;
文档
编写实验报告。
实验报告
1.验证实验1(折半查找)
1.1实验目的
1.1.1掌握折半查找算法的基本思想;
1.1.2掌握折半查找算法的实现方法;
1.1.3掌握折半查找算法的时间性能。
1.2实验内容
1.2.1根据输入长度,生成一个升序排列的顺序表
1.2.2根据输入要查找的值,使用折半查找法(也叫二分查找法),使用递归算法进行查找。
1.2.3查询结果返回所在位置序号
1.3算法思想、总体设计
1.3.1结合同期课程,决定选用C#作为实验的工具语言。
1.3.2折半查找的操作对象为有序的顺序表,所以在试验中生成一个有序的数组作为实验对象。
1.3.3折半查找的算法思想是,将数列按有序化(递增或递减)排列,查找过程中先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。
通过一次比较,将查找区间缩小一半。
折半查找是一种高效的查找方法。
它可以明显减少比较次数,提高查找效率。
但是,折半查找的先决条件是查找表中的数据元素必须有序。
1.3.4时间复杂度为O(log2n)
1.3.5折半查找一般有3中算法,一般算法、递归算法、迭代算法,试验中选用递归算法作为实现方法。
1.4算法设计
1.4.1数据结构设计
折半查找的对象要求是有序的顺序表,所以实验对象定义为一个有序的数组。
//定义一个int型的数组,长度size由界面输入
list1=newint[size]
1.4.2算法执行流程图
1.4.2.1顺序表的建立
1.4.2.2折半查找算法(递归)
递归执行
否
是
1.5算法代码实现
//初始化顺序表
publicstringinitiatelist(intsize)//size传递来的顺序表长度参数
{
stringt="
"
;
//把生成的顺序表返回至text中显示
list1=newint[size];
inti;
for(i=0;
i<
size;
i++)//用循环生成升序的顺序表
list1[i]=i;
if(i==size-1)
t=t+list1[i].ToString();
else
t=t+list1[i].ToString()+"
"
}
return(t);
//对顺序表进行折半查找,使用递归算法
//分别传递r数组首地址,low查询的左边界,high查询的右边界,key所需查找的值
publicstringfindsearch(int[]r,intlow,inthigh,intKey)
intmid=(low+high)/2;
if(low<
high)
if(Key<
=r[mid])
returnfindsearch(r,low,mid,Key);
//递归执行
returnfindsearch(r,mid+1,high,Key);
elseif(low==high)
if(Key==r[mid])
return(low+1).ToString();
//返回找到值的位置,比数组序号+1
return("
无此数据!
);
1.6代码测试
1.6.1测试方法
采用黑盒测试方法进行测试
1.6.2测试数据准备
着重准备数组首末边界的值以及不符合条件的值进行查找,尽量试图发现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对一组数据进行简单选择排序(按升序排列)
2.2.2为了更好理解单链表,这个实验使用单链表模型来操作。
2.2.3对无序的单链表进行选择排序(升序)
2.3算法思想、总体设计
2.3.1结合同期课程,决定选用C#作为实验的工具语言。
2.3.2采用单链表进行排序操作。
2.3.3简单选择排序的基本思想:
对待排序的序列进行若干趟处理,通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录和第i(1≤i≤n)个记录进行交换,这样一趟处理就能确定一个数的位置,对n个数如果确定n-1个数的位置,则这n个数就排序成功。
2.3.4选择排序的算法的时间复杂度为O(n2)。
并且排序是稳定的
2.4算法设计
2.4.1数据结构设计
使用一个单链表作为选择排序的操作对象
//单链表结构体定义
classSingleLink
privateintidata;
publicintData
{get
{returnidata;
set
{idata=value;
publicSingleLinknext;
publicSingleLink()
idata=-1;
next=null;
publicSingleLink(intdata)
{idata=data;
2.4.2算法执行流程图
2.4.2.1初始化单链表
2.4.2.2简单选择排序
i++
2.5算法代码实现
2.5.1单链表初始化
Randomr=newRandom();
//从1-100之间产生数
list.clear();
//单链表清空
for(inti=0;
dlblong;
i++)//根据所需长度,循环插入单链表节点
list.Insert(r.Next(100));
//节点插入操作
f++;
textBox1.Text=list.Display();
//返回整个单链表显示
2.5.2单链表选择排序
y=head;
flag=head.next;
intn=0,i,j,temp=0,biaoji;
y=head.next;
p=head.next;
q=head.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测试数据准备
各种排序方式下的排序结果情况,主要检查单链表指针是否有错误定位
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直接插入算法过程藐视,将单链表划分为有序区和无序区,有序区只包含一个元素结点,依次取无序区中的每一个结点,在有序区中查找待插入结点的插入位置