20172329 2018-2019 《Java软件结构与数据结构》实验三报告
20172329 2018-2019-2 《Java软件结构与数据结构》实验三报告
课程:《Java软件结构与数据结构》
班级: 1723
姓名: 王文彬
学号:20172329
实验教师:王志强
实验日期:2018年11月19日
必修/选修: 必修
一、实验内容
1.1 第一个实验内容
- 要求
- (1)定义一个Searching和Sorting类,并在类中实现linearSearch(教材P162 ),SelectionSort方法(P169),最后完成测试。
- (2)要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位
- (3)提交运行结果图。(2分)
1.2 第二个实验内容
- 要求
- (1)重构你的代码把Sorting.java Searching.java放入 cn.edu.besti.cs1723.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1723.G2301)把测试代码放test包中
- (2)重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)(2分)
1.3 第三个实验内容
- 要求
- (1)参考http://www.cnblogs.com/maybe2030/p/4715035.html 在Searching中补充查找算法并测试提交运行结果截图(3分)
1.4 第四个实验内容
- 要求
- (1)补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
- (2)测试实现的算法(正常,异常,边界)提交运行结果截图(3分,如果编写多个排序算法,即使其中三个排序程序有瑕疵,也可以酌情得满分)
1.5 第五个实验内容
- 要求
- (1)编写Android程序对各种查找与排序算法进行测试提交运行结果截图推送代码到码云(加分3,加到实验中)
二、实验过程
2.1 第一个实验过程
过程
- (1)因为之前已经写好过排序和查找的算法,所以不算陌生,就进行了junit测试
结果:




2.2 第二个实验过程
过程
- (1)第二个实验的主要任务是,首先要重构代码,然后重新编译然后进行在虚拟机和idea上进行再一次的测试运行
- 注:学长学姐看这里!!:因为mac电脑本身就是unix系统,是linux系统的进阶版,所以本身的bash和乌班图是一样的,又因为在新电脑中没有安装虚拟机,所以,就在电脑上的bash里直接进行了测试!!
结果:







2.3 第三个实验过程
过程
- 第三个实验应该是我当时花费时间比较长的一个实验了,因为里面涉及补充没有听说过的查找方法:斐波那契额查找。
(1)斐波那契查找
public static boolean fibonacciSearch(int[] table, int keyWord) {
int i = 0;
while (getFibonacci(i) - 1 == table.length) {
i++;
}
int low = 0;
int height = table.length - 1;
while (low <= height) {
int mid = low + getFibonacci(i - 1);
if (table[mid] == keyWord) {
return true;
} else if (table[mid] > keyWord) {
height = mid - 1;
i--;
} else if (table[mid] < keyWord) {
low = mid + 1;
i =i- 2;
}
}
return false;
}
public static int getFibonacci(int n) {
int res = 0;
if (n == 0) {
res = 0;
} else if (n == 1) {
res = 1;
} else {
int first = 0;
int second = 1;
for (int i = 2; i <= n; i++) {
res = first + second;
first = second;
second = res;
}
}
return res;
}
我们在高中就接触过斐波那契这个人,因为我们学过一种数列叫做斐波那契数列,其中就像这样的数列是斐波那契数列:1,1,2,3,5,8,13......., 第三个数字是前两个数字的和,因为这样一个数列在无穷的时候前一个数除以后面的数字会无限接近于0.618,也就是我们的黄金分割数,同样这个算法的原理也就是基于二分进行开展的,因此我们的这个新的算法斐波那契查找同样用的也是这个原理,依次进行二分,查找这样目标,这样可以最大限度的节省效率,速度很快。
结果:





2.4 第四个实验过程
过程
- (1)第四个实验是补充上课讲过的排序算法,我一共写了堆排序,二叉树排序,希尔排序,这三种新的方法,加上当时学习的选择排序,插入排序,冒泡排序,归并排序,一种七种,其中对于三种新算法进行了编写和测试:
1、堆排序
public static String Heap(Integer[] a){
ArrayHeap q =new ArrayHeap();
String result="";
for (int i =0;i<a.length;i++){
q.addElement(a[i]);
}
for (int i =0;i<a.length;i++){
result+=q.removeMax()+" ";
}
return result;
}
2、希尔排序
public static String xiersort(Integer []arr){
for(int gap=arr.length/2;gap>0;gap/=2){
for(int i=gap;i<arr.length;i++){
int j = i;
while(j-gap>=0 && arr[j]<arr[j-gap]){
swap(arr,j,j-gap);
j-=gap;
}
}
}
return (Arrays.toString(arr));
}
3、二叉树排序
public static String Seachtree(Integer[] a){
LinkedBinarySearchTree c =new LinkedBinarySearchTree();
for (int i =0;i<a.length;i++){
c.addElement(a[i]);
}
String result="";
for (int i =0;i<a.length;i++){
result+=c.removeMin()+" ";
}
return result;
}
因为这几个方法都比较容易简单理解并且编写过程耗费时间较少,所以在这里就不进行详细的分析了,相信大家也都能够理解其中的原理,在这里我需要提一点的是,希尔排序,这个排序不知道大家还有没有印象,就是在我们学习排序和查找这一章节的时候,课后习题有一道让我们编写叫做间接排序法,这样一道题,其实这两个算法有异曲同工之处,在我之前看到的一篇文章里这样讲,希尔排序是带有权重(也就是那个间隔)的直接排序,而间隔排序就是带有间隔的选择排序法,所以,在我编写这次的代码的时候,就可以找到当时写那个作业的时候的感觉,虽然上次那个题目有问题,最后也不知道如何解决了,但是当我们按照题意编写的时候,总是感觉有地方有问题,所以在这里再提醒一下自己不要忘记当时的问题。
结果:








2.5 第五个实验过程
过程
- 这次的实验让我重新拾起了andriod的编写,其中忘记了一些,但是大都还是可以想得起来,所以还OK
结果:




三、 实验过程中遇到的问题和解决过程
- 问题1:主要是在没有了虚拟机,学习了如何在电脑本身的bash上进行命令行操作
- 问题1解决方案:
- 1、首先我们的电脑里必须具有java的jdk,这样我们才可以在bash里输入java时有正确回复;如图1
- 2、然后我们需要找到我们写好的java文件,无论是用vim编辑器还是在文档中写好改为Java文件,我们首先依旧需要将这个文件进行javac的
操作,也就是编译的操作,然后我们就产生了class文件,然后我们就可以继续了。如图2 - 3、在我们准备运行这个class文件的时候,这个我们需要退出到上一级文件进行运行,假如我们进入到这个class文件所在的目录,就会跳出找不到或无法运行的错误,具体原因应该是指定路径设定的问题。如图3
图1

图2

图3

感想
又是接近了期末,自己最近因为事情越来越多,打乱了自己的安排,希望自己可以找到节奏,继续加油!
参考资料
[Data Structure & Algorithm] 七大查找算法
Android Studio的git功能的使用介绍
20172329 2018-2019 《Java软件结构与数据结构》实验三报告的更多相关文章
- 20172329 2018-2019-2 《Java软件结构与数据结构》实验二报告
20172329 2018-2019-2 <Java软件结构与数据结构>实验二报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 王文彬 学号:2017232 ...
- 20172329 2018-2019《Java软件结构与数据结构》第一周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第一周学习总结 在这学期就已经大二了,也已经步入了学习专业课的核心时间,在这个阶段,我们应该了解自己的学习情况,针对自己 ...
- 20172328 2018—2019《Java软件结构与数据结构》第二周学习总结
20172328 2018-2019<Java软件结构与数据结构>第二周学习总结 概述 Generalization 本周学习了第三章集合概述--栈和第四章链式结构--栈.主要讨论了集合以 ...
- 20172302 《Java软件结构与数据结构》实验三:查找与排序实验报告
课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月19日 必修/选修: 必修 实验内容 (1) ...
- 20172302 《Java软件结构与数据结构》实验二:树实验报告
课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月5日 必修/选修: 必修 实验内容 (1)参 ...
- 20172302 《Java软件结构与数据结构》实验一:线性结构实验报告
课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年9月26日 必修/选修: 必修 实验内容 (1)链 ...
- 20172301 《Java软件结构与数据结构》实验三报告
20172301 <Java软件结构与数据结构>实验三报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...
- 20172301 《Java软件结构与数据结构》实验二报告
20172301 <Java软件结构与数据结构>实验二报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...
- 20172301 《Java软件结构与数据结构》实验一报告
20172301 <Java软件结构与数据结构>实验一报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...
随机推荐
- POJ 2250 (LCS,经典输出LCS序列 dfs)
题目链接: http://poj.org/problem?id=2250 Compromise Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- PHP+MySQL实现海量数据导入导出的总结:is_numbric函数的坑
前段时间有个需求:将生产环境的部分数据转移到测试服务器进行测试.由于只需要导入特定账号的数据,我就想着将写个脚本,将数据组装成sql语句导出为sql文件,然后转移到测试服务器,导入到MySQL中.想象 ...
- GATK--数据预处理,质控,检测变异
版权声明:本文源自 解螺旋的矿工, 由 XP 整理发表,共 13781 字. 转载请注明:从零开始完整学习全基因组测序(WGS)数据分析:第4节 构建WGS主流程 | Public Library o ...
- 【转载】WCF 客户端识别认证之UserName认证
原文地址: http://blog.csdn.net/zxz414644665/article/details/9308055 过程:用户调用service,服务端验证用户传来的用户名和密码(传输过程 ...
- 20155321 《信息安全系统设计》Linux多线程的深入学习
再次学习之多线程 基本概念的再次学习 线程是程序执行的最小单位(进程是资源管理的最小单位),线程隶属于某个进程中 进程有自己的数据段.代码段和堆栈段.线程通常叫做轻型的进程,每个线程共享其所附属进程的 ...
- 《图说VR入门》——Unity插件DK2使用教程
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53339254 作者:car ...
- 简单的贝叶斯分类器的python实现
# -*- coding: utf-8 -*- ''' >>> c = Classy() >>> c.train(['cpu', 'RAM', 'ALU', 'io ...
- 【转载】COM小结
原文:http://blog.csdn.net/byxdaz/article/details/6595210 一.Com概念 所谓COM(Componet Object Model,组件对象模型),是 ...
- CF 1138 F. Cooperative Game
F. Cooperative Game 链接 题意: 有10个玩家,开始所有玩家在home处,每次可以让一些玩家沿着边前进一步,要求在3(t+c)步以内,到达终点. 分析: 很有意思的一道题.我们构造 ...
- MySQL易忘知识点梳理
一.零碎知识 1.mysql where子句区分大小写:WHERE BINARY 2.判断是否为null,只能用is null,is not null,不能用=null或!=null 3.函数 4.S ...