20172316 2017-2018-2 《程序设计与数据结构》实验三报告

本次实验涵盖了《程序设计与数据结构》课程的关键内容,包括线性查找、选择排序、二分查找、斐波那契查找等算法的实现与测试。实验不仅重构了Sorting和Searching类,还增加了冒泡排序、归并排序、希尔排序等多种排序算法,并完成了详细的测试用例设计。

课程:《程序设计与数据结构》
班级: 1723
姓名: 赵乾宸
学号:20172316
实验教师:王志强
必修/选修:必修


1.实验内容

1

定义一个Searching和Sorting类,并在类中实现linearSearch(教材P162 ),SelectionSort方法(P169),最后完成测试。
要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位
提交运行结果图。

2

重构你的代码
把Sorting.java Searching.java放入 cn.edu.besti.cs1723.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1723.G2301)
把测试代码放test包中
重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)

3

参考http://www.cnblogs.com/maybe2030/p/4715035.html 在Searching中补充查找算法并测试
提交运行结果截图

4

补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
测试实现的算法(正常,异常,边界)
提交运行结果截图


2. 实验过程及结果

(1) 在实验三(1)中,分别实现线性查找和选择排序,皆是书上代码,曾经实现过,再加深理解之后复制了过来。测试时采用Junit测试,在数组{2, 0, 1, 7, 2, 3, 1, 6}中,分别查找位于最后的“6”,重复的“2”,中间的“7”,索引0、索引7处的数字,以及所找数字不存在的情况。结果正常。1334032-20181209212112396-179171003.png

然后对选择排序进行测试,分别使用数字、英文字母、特殊字符、中文进行了测试,结果正常。1334032-20181209212124224-1652853824.png

(2) 对原有代码重构了之后,在IDEA和虚拟机上分别对代码进行测试,测试通过。1334032-20181209212158717-2065163474.png
1334032-20181209212216866-1577149080.png

(3) 在原有代码基础上增加新的查找方法。
我增添了三个新的查找方法:二分查找、插值查找、以及斐波那契(Fibonacci)查找。由于C++和Java语言非常相似,转换起来并不困难。1334032-20181209212244042-342544753.png

(4) 补充排序方法。我补充了四个排序方法:冒泡排序、归并排序、希尔排序以及插入排序1334032-20181209212302458-1641462163.png


3. 实验过程中遇到的问题和解决过程

(1) 从基本原理上来看,斐波那契查找和二分查找几乎没有什么不同,区别仅仅在于分割的位置不同,为什么会去选择斐波那契查找?
两者貌似没有什么太大的不同,但实验三(3)中提供的博客中提到,

(斐波那契查找在)最坏情况下,时间复杂度为O(log2n),且其期望复杂度也为O(log2n)

而二分查找在

最坏情况下,关键词比较次数为log2(n+1),且期望时间复杂度为O(log2n)

其次,斐波那契查找在进行查找之前,已经建立好了一个斐波那契数列,以便于查找的进行,每一次分割时都直接取数列中确定的索引值,相对于二分查找节省了一次除法运算。
1334032-20181209212336762-1610005916.png

(可以看到,过程中不需要除以二或其他运算,直接从斐波那契数列中拿到下一个分割点)


参考资料

《Java程序设计与数据结构教程(第二版)》
《Java程序设计与数据结构教程(第二版)》学习指导

转载于:https://www.cnblogs.com/zhaoqianchen/p/10093375.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值