• 20162312张家铖 查找课堂测试补分博客


    题目要求:

    • 1 用JDB或IDEA单步跟踪在下列数据中(3 8 12 34 54 84 91 110)查找45和54的过程,对比使用顺序查找和二分查找的执行过程
    • 2提交测试找到或找不到那一步的截图,要全屏,包含自己的学号信息
    • 3课下把代码推送到代码托管平台

    实验过程:

    调用Searching中的binarySearch和linearSearch方法,然后再进行强制类型转换,转为Integer类型后查找45和54,打印出45、54是否找到

    关键代码:


    Searching:

    
    import java.util.ArrayList;
    import java.util.HashMap;
    
    /**
     * Created by zjc  on 2017/11/6.
     */
    public class Searching {
    
        public static Comparable linearSearch(Comparable[] data, Comparable target) {
            Comparable result = null;
            int index = 0;
    
            while (result == null && index < data.length) {
                if (data[index].compareTo(target) == 0)
                    result = data[index];
                index++;
            }
            return result;
        }
    
        public static Comparable binarySearch(Comparable[] data, Comparable target) {
            Comparable result = null;
            int first = 0, last = data.length - 1, mid;
    
            while (result == null && first <= last) {
                mid = (first + last) / 2;
                if (data[mid].compareTo(target) == 0)
                    result = data[mid];
                else if (data[mid].compareTo(target) > 0)
                    last = mid - 1;
                else
                    first = mid + 1;
            }
            return result;
        }
    
    
    
        public static int insertionSearch(int a[], int value,
                                          int low, int high)
        {
            int cp = low + (value - a[low]) / (a[high] - a[low]) * (high - low);
            if (a[cp] == value)
                return a[cp];
            if (a[cp] > value)
                return insertionSearch(a, value, low, cp - 1);
            if (a[cp] < value) ;
            return insertionSearch(a, value, cp + 1, high);
    
        }
    
        final int max_size = 20;
    
    
    
        public Integer FibonacciSearch(Integer a[], Integer key)
        {
            int low = 0;
    
            int high = a.length - 1;
    
    
            int[] F = new int[max_size];
    
            F[0] = 1;
    
            F[1] = 1;
    
            for (int i = 2; i < max_size; ++i)
    
                F[i] = F[i - 1] + F[i - 2];
    
    
            int h = 0;
            while (a.length > F[h] - 1)
                h++;
    
            Integer[] temp = new Integer[F[h] - 1];
            for (int j = 0; j < a.length; j++)
                temp[j] = a[j];
    
            for (int i = a.length; i < F[h] - 1; i++)
                temp[i] = a[a.length - 1];
    
            while (low <= high)
            {
                int mid = low + F[h - 1] - 1;
    
                if (key < temp[mid])
                {
                    high = mid - 1;
    
                    h = h-1;
                } else if (key > temp[mid])
                {
                    low = mid + 1;
    
                    h = h-2;
    
                }
                else
                    {
                    if (mid < a.length)
    
                        return mid;
    
                    else
    
                        return a.length - 1;
    
                }
            }
            return null;
        }
    
        public static Comparable binarySearchTree(Comparable [] data, Comparable target){
            Comparable result = null;
            LinkedBinarySearchTree tree = new LinkedBinarySearchTree();
            for (int i = 0;i< data.length;i ++){
                tree.add(data[i]);
            }
            if (tree.find(target) == target)
                result = target;
            return result;
        }
        public static class blockSearch {
    
    
            private int[] index;
            private ArrayList[] list;
    
            public void blockSearch(int[] index, int i, int i1) {
                if (index != null && index.length != 0) {
                    this.index = index;
                    this.list = new ArrayList[index.length];
    
                    for (i = 0; i < list.length; i++) {
                        list[i] = new ArrayList();
                    }
                } else {
                    throw new Error("index cannot be null or empty");
                }
            }
        }
    
    
        public int hashSearch(int[] data, int z)
        {
            boolean result = false;
    
            HashMap<Integer, Integer> cop = new HashMap();
    
            for(int c = 0; c<data.length; c++)
    
                cop.put(c,data[c]);
    
            for(int i = 0; i<data.length; i++)
    
                if (data[i]==z)
    
                    result = true;
    
            if(result)
                return z;
            else
                return -1;
        }
    }
    

    test

    
    /**
     * Created by zjc on 2017/11/6.
     */
    public class searchtest {
        public static void main(String[] args) {
            int[] A1 = {2312, 2, 5, 8, 95, 3, 6, 5, 4,7,3,2, 6, 7};
            Integer[] A2 = {2, 2, 3, 5,4,2,6,8,435, 5, 6, 6, 7, 8, 95, 2312};
    
            Searching searching = new Searching();
            System.out.println(searching.hashSearch(A1, 6));
            System.out.println(searching.FibonacciSearch(A2,95));
            System.out.println(searching.insertionSearch(A1,8,2,0));
            System.out.println(searching.binarySearchTree(A2,8));
    
        }
    }
    
    

    单步跟踪截图:

  • 相关阅读:
    数据库 'tempdb' 的日志已满的解决方法
    SQL Server2005|身份验证模式修改转载
    GRUB讲解转载
    远程连接sql server 2000服务器的方法,及配置sql数据库服务器转载
    SQL 删除一列的语句
    陶哲轩实分析 命题 8.2.6 证明
    陶哲轩实分析 引理 8.2.3 证明
    陶哲轩实分析 习题 7.5.3
    陶哲轩实分析 习题 7.5.3
    陶哲轩实分析 引理8.2.7 注
  • 原文地址:https://www.cnblogs.com/1zhjch/p/7880941.html
Copyright © 2020-2023  润新知