20182305 2019-2020-1 《数据结构与面向对象程序设计》实验七报告
20182305 2019-2020-1 《数据结构与面向对象程序设计》实验七报告
课程:《程序设计与数据结构》
班级: 1823
姓名: 孙铭泽
学号:20182305
实验教师:王志强
实验日期:2019年11月4日
必修/选修: 必修
1.实验内容
-
1.定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位
提交运行结果图。 -
2.重构你的代码
把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)
把测试代码放test包中
重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种) -
3.参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试
提交运行结果截图 -
4.补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
测试实现的算法(正常,异常,边界)
提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵,也可以酌情得满分) -
5.编写Android程序对实现各种查找与排序算法进行测试
提交运行结果截图
推送代码到码云(选做,加分)
2. 实验过程及结果
-
1.先编写searching和sorting类,在这两个类中分别实现线性查找和选择排序方法。分别编写test类进行测试.
-
2.将第一部分中的两个类移动至要求的包中,并将测试代码放入test包中,在test代码中
import cn.edu.besti.cs1823.S2305
并进行测试。
-
3.参考已给的博客链接,学习各种查找算法并在Searching中补充查找算法并测试
这一实验题稍有难度,首先要仔细阅读这个博客来理解学习博客中的查找算法,再将这些算法消化吸收自己去编写。因为博客中的代码不是Java语言编写,我们要先学习理解这些代码,搞懂这一部分是什么意思,对数据有什么操作,完全理解之后,我们才能进行自己的编写。在IDEA上对第一题的Searching类进行补充扩展,这一过程会出现很多错误,需要一点一点纠正。
-
4.补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等
与上一个实验差不多,先复习回想这些排序方法,再去实现他们,尤其要注意的是,这些排序方法的使用格式不一样,有些排序方法需要对排序的范围进行输入限制。虽然都是全部进行排序,但是因为代码功能的限制,必须手动输入上下限。
3. 实验过程中遇到的问题和解决过程
-
问题1:在编写linearSearch方法时,将目标元素设置为哨兵后,将关键字序列数组一一放入哨兵后的数组,但是在查找时却出现的NullPointException的报错提示。
-
问题1解决方案:单步调试了几遍时候发现,是我在将关键字数组a置入有哨兵的数组b时出现问题。倒置最后一位关键字数组放入后循环并没有终止,而是继续试图将下一位放入数组b中。但是那个位置并没有数据,所以自动抛出空指针异常。
-
问题2: 在实验中遇到了
这个问题,反复查看代码,却找不到解决的办法。 -
问题2解决方案:后来重新捋了一下思路,发现自己对循环的使用有些问题,导致实际处理起来pop方法时出现弹出元素后形成空栈,但是循环没有停止,继续-1并对数组进行操作。导致出现了-1的数字。