zoukankan      html  css  js  c++  java
  • 实验3

    实验一

    要求:完成教材P302 Searching.Java ,P305 Sorting.java中方法的测试

    不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位

    实验思路:这些代码之前作业就写过,只是改了部分测试用例,没有什么问题。

    实验截图:

    实验二

    要求:重构你的代码

    把Sorting.java Searching.java放入 cn.edu.besti.cs1623.(姓名首字母+四位学号) 包中
    把测试代码放test包中
    重新编译,运行代码

    实验思路:我的命令行出现了些问题,总是出现非法字符,最后我把代码拷到同学的电脑上重构运行截图。

    实验截图:

    实验三

    要求:参考 http://www.cnblogs.com/maybe2030/p/4715035.html 在Searching中补充查找算法并测试

    实验思路:这个实验的主要问题是斐波那契数列的实现,从第三位开始的数字是它前两位的和,随着元素个数增多越来越接近需要的黄金比例,参考代码实现:

    		/* 输出:9 */
    		static int FibonacciSearch(int [] a, int n, int key){
    			int [] F = {0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987};
    			int low, high, mid, i, k;
    			low = 1;
    			high = n;
    			k = 0;
    			while (n > F[k]-1) /* 计算n位于斐波那契数列的位置 */
    				k++;
    			
    			while (low <= high) {
    				mid = low + F[k-1] -1;
    				if (key < a[mid]){
    					high = mid - 1;
    					k = k - 1;
    				}
    				else if (key > a[mid]){
    					low = mid + 1;
    					k = k - 2;
    				}
    				else {
    					if (mid <= n)
    						return mid;
    					else
    						return n;
    				}
    			}
    			return 0;
    		}
    

    实验截图:

    实验四

    要求:补充实现课上讲过的排序方法:希尔排序,堆排序,桶排序,二叉树排序等

    测试实现的算法(正常,异常,边界)

    实验思路:堆排序、桶排序主要参考PPT里的代码,二叉树排序之前实现过二叉查找树,调出中序遍历即可,希尔排序我又回去看了一下之前的课件,加深了理解

    希尔排序:

    堆排序:

    // 堆排序
        public static void heapSort(Integer[] data)
        {
    
            for (int i = 0; i < data.length; i++)
            {
                createMaxdHeap(data, data.length - 1 - i);
    
                sw(data, 0, data.length - 1 - i);
    
            }
        }
    
        public static void createMaxdHeap(Integer[] data, int lastIndex)
        {
            for (int i = (lastIndex - 1) / 2; i >= 0; i--)
            {
    
                int an = i;
    
                while (2 * an + 1 <= lastIndex) {
    
                    int biggerIndex = 2 * an + 1;
                    if (biggerIndex < lastIndex) {
    
                        if (data[biggerIndex] < data[biggerIndex + 1]) {
    
                            biggerIndex++;
                        }
                    }
                    if (data[an] < data[biggerIndex]) {
    
                        sw(data, an, biggerIndex);
                        an = biggerIndex;
                    } else {
                        break;
                    }
                }
            }
        }
    
        public static void heapSort2(int[] data)
        {
            for (int ch = 0; ch < data.length; ch++)
            {
                createMaxdHeap2(data, data.length - 1 - ch);
                swap(data, 0,data.length - 1 - ch );
    
            }
        }
    
        public static void createMaxdHeap2(int[] data, int lastIndex)
        {
            for (int i = (lastIndex - 1) / 2; i >= 0; i--)
            {
    
                int j = i;
    
                while (2 * j + 1 >= lastIndex) {
    
                    int biggerIndex = 2 * j + 1;
    
                    if (biggerIndex > lastIndex) {
    
                        if (data[biggerIndex] > data[biggerIndex + 1])
                        {
    
                            biggerIndex++;
                        }
                    }
                    if (data[j] < data[biggerIndex])
                    {
    
                        swap(data, j, biggerIndex);
                        j = biggerIndex;
                    } else {
                        break;
                    }
                }
            }
        }
    

    桶排序:

    二叉树排序 :

    实验截图:

  • 相关阅读:
    (一)Java基本数据类型及运算符
    (二)Java控制执行流程
    ArrayList类源码解析——ArrayList动态数组的实现细节(基于JDK8)
    Java的四个标记接口:Serializable、Cloneable、RandomAccess和Remote接口
    Java容器类源码分析之Iterator与ListIterator迭代器(基于JDK8)
    Java容器类源码分析前言之集合框架结构(基于JDK8)
    浅谈虚树
    点分治
    Ze_Min Tree 主席树
    笛卡尔树的妙用
  • 原文地址:https://www.cnblogs.com/1zhjch/p/7813890.html
Copyright © 2011-2022 走看看