20182311 2019-2020-1 《数据结构与面向对象程序设计》实验七报告
Posted lengchong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20182311 2019-2020-1 《数据结构与面向对象程序设计》实验七报告相关的知识,希望对你有一定的参考价值。
20182311 2019-2020-1 《数据结构与面向对象程序设计》实验七报告 |
课程:《程序设计与数据结构》
班级: 1823
姓名: 冷冲
学号:20182311
实验教师:王志强
实验日期:2019年10月30日
必修/选修: 必修
1.实验内容
- 定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位提交运行结果图。
- 重构你的代码把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301),把测试代码放test包中重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)
- 参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试,提交运行结果截图。
- 补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个),测试实现的算法(正常,异常,边界)提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵,也可以酌情得满分)
- 编写android程序对实现各种查找与排序算法进行测试,提交运行结果截图,推送代码到码云(选做,加分)。
2. 实验过程及结果
- 定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
- 补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等
- 参考 ,学习各种查找算法并在Searching中补充
- 线性查找:遍历数组,找到则返回数组元素下标,未找到返回-1;
- 二分查找:
- 折半实现:使用first和last标记所有元素的起始处和结尾处,mid取(first+last)/2,当first<=last时循环,实现每次指向中值的查找。
- 递归实现:大致代码如下,递归方法需要增加两个形参用来标记递归进行到哪一步了。
public static Comparable BinarySearch2(Comparable[] data,Comparable target,int first,int last){ int mid=(first+last)/2; if(data[mid].compareTo(target)==0){ return mid+1; } if(data[mid].compareTo(target)>0) return BinarySearch2(data,target,first,mid-1); if(data[mid].compareTo(target)>0) return BinarySearch2(data,target,mid+1,last); return false; }
- 插值查找:二分查找法的改进版,只是将mid的取值方式改进如下:
mid=first+(target-data[first])/(data[last]-data[first])*(last-first);
- 哈希查找:通过求余算法确定访问元素的下标。
- 斐波那契查找:获取斐波那契数列,再使用黄金分割算法确定访问元素的下标。
- 插入排序:利用双重循环和插入,逐渐将整个表从前向后实现有序排列。
- 折半插入排序:对插入排序的改良,将线性探索改为折半探索
- 快速排序:根任意元素划分表,再递归的对两个子表进行排序,从而完成一整组的排序。
- 归并排序:先递归的把表对分成每个子表只含一个元素,再将子表按序合并。
- 选择、冒泡排序:
重构你代码,放入cn.edu.besti.cs1823.Lc20182311包中重新编译提交编译IDEA,命令行两种运行截图。
编写Android程序对实现各种查找与排序算法进行测试
安卓的布局真令人头疼,动不动就覆盖。
3.实验过程中遇到的问题及解决过程
- 问题1:使用compareto比较两个comparable数组元素出错
- 问题1解决方案:使用compareTo方法进行两个对象的比较,首先要将类继承comprable接口,这一点做到了。但是下列代码就会报错,因为数组第一行只是声明了一个数组,没有实例化不能使用compareTo方法。
Comprare[] a=new Comprare[4];
a[1].comprareTo(a[2]);
- 问题2:为什么使用arrays.sort()方法必须实现Comparable接口?
- 问题2解决方案:Arrays.sort(Object[] objs)方法的排序机制是,在内部把Object数组里面强制转换为Comparable类型,再调用compareTo()方法进行排序。调用CompareTo()方法需要实现Comparable接口。
4.参考资料
以上是关于20182311 2019-2020-1 《数据结构与面向对象程序设计》实验七报告的主要内容,如果未能解决你的问题,请参考以下文章
20182311 2019-2020-1 《数据结构与面向对象程序设计》实验二报告
20182311 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结
20182311 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结
20182311 2019-2020-1 《数据结构与面向对象程序设计》第7周学习总结