20182334 2019-2020-1 《数据结构与面向对象程序设计》实验七报告
课程:《程序设计与数据结构》
班级: 1823
姓名: 姬旭
学号: 20182334
实验教师:王志强
实验日期:2019年10月31日
必修/选修: 必修
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
第一个实验主要是按照书上的代码,修改一下变成自己的代码,之后运行。
在实验的过程中,我没有用Test文件根,而是自己创建了Test文件,之后运行,得到10个测试用例。
实验七-查找与排序-2
第二个实验相对于第一个实验来说没有变化,就是多了一条要在命令行输入再输出。新创建一个根目录,名字叫cn.edu.besti.cs1823.J2334,将测试文件和代码都放进去,分别用IDEA和命令行运行:
实验七-查找与排序-3
第三个实验有很多内容,关于查找分了有七种方法:
得到的结果分别是:
实验七-查找与排序-4
第四个实验是要实现三种排序方法:希尔排序、堆排序 、二叉树排序。
得到的结果分别是:
实验七-查找与排序-5
第五个实验是要用Android实现所有查找与排序的方法。
得到的结果如下:
3. 实验过程中遇到的问题和解决过程
问题1:在做查找时老师发了个网址,要求按照上面的查找方法用java全部实现,那么我看到斐波那契查找不太明白是什么意思,看了[Data Structure & Algorithm] 七大查找算法大致明白了他中间的内容,但是这里面是用c++实现的,用java实现又会出现很多问题。
问题1解决方案:那么我找到了一篇我感觉会更好一点的博客,因为里面是由java实现的,所以感到很亲切: 斐波那契查找(黄金分割法查找)Java实现。
所谓斐波那契查找,就是我们所熟悉的黄金分割,两数相比为0.618,这两数可以是较大的数和较小的数相比,也可以是整体和较大的数,对于斐波那契数列,就是从第三个数开始,前两个数相加等于后面的数,一直到最后;越往后,相邻的两数相比越接近0.618,所以称为斐波那契数列。
- 问题2:在做堆排序时不明白怎么做。
- 问题2解决方案:所以上网查找资料,发现一张动图很好的解释了堆排序:
堆排序有大堆和小堆,这张图展示了小堆排序,就是大数在下,小数在上,最后再一个一个数输出,也就是从大到小排序。
其他(感悟、思考等)
实验的感觉总是那么令人难受,每次实验都是将近一周才能做完,让人无可奈何,也只能说明自己菜,越到学习后期,越感觉自己无能为力,学的东西变得疲软,虽然一直在输入,但输出总感觉很不理想,必须要抽空再来学习一遍,但时间不等人,目前只能尽自己的力量能学多少就学多少,为未来的自己减轻点压力,拜托了!
参考资料
- 《Java程序设计与数据结构教程(第二版)》
- 《Java程序设计与数据结构教程(第二版)》学习指导