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 实验教师:王志强老师 ...
随机推荐
- HDU 1025 LIS二分优化
题目链接: acm.hdu.edu.cn/showproblem.php?pid=1025 Constructing Roads In JGShining's Kingdom Time Limit: ...
- .Net文档下载
public static void DownLoadFile(string fileName, HttpResponse Response, HttpServerUtility Server) { ...
- MongoDB初学笔记(1)
学习目标 理解MongoDb的特点和体系结构 掌握常用的MongoDB命令 MongoDB是一种介于关系数据库和非关系数据库中的一种数据库.它支持的数据结构非常松散,类似于JSON的BJSOn格式,所 ...
- Delphi的idhttp报508 Loop Detected错误的原因
一般是访问https时才出现“508 Loop Detected”,idhttp+IdSSLIOHandlerSocketOpenSSL,这个在上篇文章中讲过了. 由于该问题网上资料极少,连外文资料也 ...
- 飞控入门之C语言指针回顾
指针 何为指针?来个官方定义:指针是一个值为内存地址的变量(或数据对象). 一.指针的声明 //示例 int *pi; //pi是指向int类型变量的指针 char *pc; // pi是指向char ...
- 函数的返回值是void
#include <stdio.h> void sub(int x,int y,int z){ z=y-x; } void main() { int a=1,b=2,c=3; sub(10 ...
- SEO优化上首页之搜索引擎蜘蛛Spider原理
Spider,蜘蛛,又名网页网络爬虫.网络机器人,是按照一定策略不断抓取互联网网页的特定程序.蜘蛛抓回的页面创建索引后参与排名,等待用户检索.为了网站优化自然排名上首页,精灵儿工作室下面详细剖析Spi ...
- 2017-2018-1 20155306 《信息安全系统设计基础》嵌入式C语言———提取设置时分秒
2017-2018-1 20155306 <信息安全系统设计基础>嵌入式C语言---提取设置时分秒 要求:根据下图,完成对时分秒的设置和提取. 示例及思路分析: 思路分析:以分钟为例,根据 ...
- CF 1041 F. Ray in the tube
F. Ray in the tube 链接 题意: 有两条平行于x轴的直线A,B,每条直线上的某些位置有传感器.你需要确定A,B轴上任意两个整点位置$x_a$,$x_b$,使得一条光线沿$x_a→x_ ...
- 【PaPaPa】实现缓存决策 - 让你的缓存变的有智慧
我有话说 本来这一篇我打算放到后面再说,可是之前泄漏了一点关于缓存决策的代码后被好多人催更了. 在此感谢大家的支持,让我更有动力的写这个系列.你们的关注让我觉得我的决定是对的,我会坚持下去把这个项目做 ...