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软件结构与数据结构》实验三报告的更多相关文章

  1. 20172329 2018-2019-2 《Java软件结构与数据结构》实验二报告

    20172329 2018-2019-2 <Java软件结构与数据结构>实验二报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 王文彬 学号:2017232 ...

  2. 20172329 2018-2019《Java软件结构与数据结构》第一周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第一周学习总结 在这学期就已经大二了,也已经步入了学习专业课的核心时间,在这个阶段,我们应该了解自己的学习情况,针对自己 ...

  3. 20172328 2018—2019《Java软件结构与数据结构》第二周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第二周学习总结 概述 Generalization 本周学习了第三章集合概述--栈和第四章链式结构--栈.主要讨论了集合以 ...

  4. 20172302 《Java软件结构与数据结构》实验三:查找与排序实验报告

    课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月19日 必修/选修: 必修 实验内容 (1) ...

  5. 20172302 《Java软件结构与数据结构》实验二:树实验报告

    课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月5日 必修/选修: 必修 实验内容 (1)参 ...

  6. 20172302 《Java软件结构与数据结构》实验一:线性结构实验报告

    课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年9月26日 必修/选修: 必修 实验内容 (1)链 ...

  7. 20172301 《Java软件结构与数据结构》实验三报告

    20172301 <Java软件结构与数据结构>实验三报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...

  8. 20172301 《Java软件结构与数据结构》实验二报告

    20172301 <Java软件结构与数据结构>实验二报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...

  9. 20172301 《Java软件结构与数据结构》实验一报告

    20172301 <Java软件结构与数据结构>实验一报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...

随机推荐

  1. ZOJ3211-Dream City(贪心思想+变形的01背包)

    Dream City Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Sta ...

  2. iOS 计算源码行数

    如果要统计ios开发代码,包括头文件的,终端命令进入项目目录下,命令如下 1.列出每个文件的行数 find . -name "*.m" -or -name "*.h&qu ...

  3. Redis高级应用——2

    Redis-事务 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作,事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的 ...

  4. c语言数组放在main函数里面和外面的区别

    最近a算法题的时候碰到一道题:一个数列前三项都为1,之后每项的值等于前三项之和,求第20193024项的最后4位数字.一开始写的代码如下: 结果一直爆 Terminated due to signal ...

  5. SEO优化上首页之搜索引擎作弊案例与反作弊原理

    搜索引擎流量价值巨大,有不少人专门研究排名机制,利用搜索引擎漏洞作弊,寻求快速提高网站排名,进而获取更多的流量和利益,甚至有的网站优化公司专门提供作弊服务.搜索引擎为了杜绝这种情况,必须能过滤大量垃圾 ...

  6. Scala的类继承

    Scala的类继承 extend Scala扩展类的方式和java一样使用extends关键字 class Employee extends Person { } 与java一样,可以在定义的子类重写 ...

  7. C语言 基础练习40

    一.题目 1.输入2个整数,求两数的平方和并输出. 2. 输入一个圆半径(r)当r>=0时,计算并输出圆的面积和周长,否则,输出提示信息. 3.函数y=f(x)可表示为: 4.编写一个程序,从4 ...

  8. 20155236范晨歌_exp6信息搜集与漏洞扫描

    20155236范晨歌_exp6信息搜集与漏洞扫描 目录 实践目标 信息搜集 漏洞扫描 总结 实践目标 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口 ...

  9. 20155308 加分题-mybash的实现(第五周)

    20155308 加分题-mybash的实现(第五周) 实验要求 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解,实现过程和问题解决的博客(包含代码托管 ...

  10. [Java] Design Pattern:Code Shape - manage your code shape

    [Java] Design Pattern:Code Shape - manage your code shape Code Shape Design Pattern Here I will intr ...