定义一个Searching和Sorting类,并在类中实现linearSearch(教材P162 ),SelectionSort方法(P169),最后完成测试。
要求很多于10个测试用例,提交测试用例设计状况(正常,异常,边界,正序,逆序),用例数据中要包含本身学号的后四位
提交运行结果图。html
通过仔细地观察,最后发现是由于末尾最后少了一个空格(掩面)。另外一种错误是数组的类型是Comparable型的,进行不了排序。
java
重构你的代码
把Sorting.java Searching.java放入 cn.edu.besti.cs1723.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1723.G2301)
把测试代码放test包中
从新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)git
public static void main(String...args)
是本身在IDEA中写的main命令行的代码。
参考http://www.cnblogs.com/maybe2030/p/4715035.html 在Searching中补充查找算法并测试
提交运行结果截图算法
这个实验中我遇到了一些问题,遇到的相关问题会在下面详写。数组
补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
测试实现的算法(正常,异常,边界)
提交运行结果截图
(3分,若是编写多个排序算法,即便其中三个排序程序有瑕疵,也能够酌情得满分)数据结构
public static void ShellSort(Comparable[] data) { int i= 0, temp = 0, j = 2; for (int incr = data.length / j; incr > 0; incr /= j) { for (int x = incr; x < data.length; x++) { temp = (int) data[x]; for (i = x - incr; i >= 0; i -= incr) { if (temp < (int) data[i]) data[i + incr] = data[i]; else break; } data[i + incr] = temp; } } }
public static <T extends Comparable<T>>String HeapSort(T[] data) { ArrayHeap temp = new ArrayHeap(); // copy the array into result heap for (int i = 0; i < data.length; i++) temp.addElement(data[i]); // place the sorted elements back into the array int count = 0; String result = ""; while (!(temp.isEmpty())) { data[count] = (T) temp.removeMin(); result += data[count] + " "; count++; } return result; }
关于二叉树排序,我并无从新写一个方法,而是直接在tester程序中直接实例化一个linkedBinarySearchTree类中,用找到最小元素来实现函数
编写Android程序对各类查找与排序算法进行测试
提交运行结果截图
推送代码到码云
(加分3,加到实验中)学习
问题1:对“斐波那契查找算法”难以理解。.net
问题1的解决方案:
在介绍斐波那契查找算法以前,咱们先介绍一下很它紧密相连而且你们都熟知的一个概念——黄金分割。
黄金比例又称黄金分割,是指事物各部分间必定的数学比例关系,即将总体一分为二,较大部分与较小部分之比等于总体与较大部分之比,其比值约为1:0.618或1.618:1。
0.618被公认为最具备审美意义的比例数字,这个数值的做用不只仅体如今诸如绘画、雕塑、音乐、建筑等艺术领域,并且在管理、工程设计等方面也有着不可忽视的做用。所以被称为黄金分割。
你们记不记得斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89…….(从第三个数开始,后边每个数都是前两个数的和)。而后咱们会发现,随着斐波那契数列的递增,先后两个数的比值会愈来愈接近0.618,利用这个特性,咱们就能够将黄金比例运用到查找技术中。
我知道斐波那契数列的一些特性,可是我都难以理解怎么来运用它,它又有什么优点呢?
// 假设有待查找数组array[n]和斐波那契数组F[k],而且n知足n>=F[k]-1&&n < F[k+1]-1,则它的第一个拆分点middle=F[k]-1 // 寻找k值,k值要求k值能使得F[k]-1刚好大于或等于n int k = 0; while (n > F[k] - 1)//计算n位于斐波那契数列的位置 k++; int[] temp;//将数组data扩展到F[k]-1的长度 temp = new int[F[k] - 1]; for (int x = 0; x < data.length; x++) { temp[x] = data[x]; } for (int i = n; i < F[k] - 1; ++i) temp[i] = data[n - 1]; while (low <= high) { int mid = low + F[k - 1] - 1; if (key < temp[mid]) { high = mid - 1; k -= 1; } else if (key > temp[mid]) { low = mid + 1; k -= 2; } else { if (mid < n) return mid; //若相等则说明mid即为查找到的位置 else return n - 1; //若mid>=n则说明是扩展的数值,返回n-1 } } return -1;
T[] maxlist
,而后调用方法将元素变为Integer可是仍是出现了
发现不会报错了,可是数组中却存储不进元素,一直是null。
public static <T> boolean linearSearch2(int[] data, int min, int max, int target) { int index = min; boolean found = false; while (!found && index <= max) { if ( data[index]==target) found = true; index++; } return found; }
这篇博客是实验完成了一周以后才开始写的,但对此次实验个人印象仍是很深入的,主要是本身往常写代码的时候遇到的问题都向别人或多或少寻求了帮助,而此次写分块查找的算法时,我是按照 [Data Structure & Algorithm] 七大查找算法这篇博客里的思路写的,和别人的思路有些不同。这是这个学期的最后一个实验了,(^o^)/~,不过接下来的小组做业挺难的。