• 查找算法之二分查找


    查找算法

    线性查找算法

       有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值。

    思路:如果查找到全部符合条件的值。[思路分析.]

    全部代码

    package com.atguigu.search;
    
    public class SeqSearch {
    
        public static void main(String[] args) {
            int arr[] = { 1, 9, 11, -1, 34, 89 };// 没有顺序的数组
            int index = seqSearch(arr, -11);
            if(index == -1) {
                System.out.println("没有找到到");
            } else {
                System.out.println("找到,下标为=" + index);
            }
        }
    
        /**
         * 这里我们实现的线性查找是找到一个满足条件的值,就返回
         * @param arr
         * @param value
         * @return
         */
        public static int seqSearch(int[] arr, int value) {
            // 线性查找是逐一比对,发现有相同值,就返回下标
            for (int i = 0; i < arr.length; i++) {
                if(arr[i] == value) {
                    return i;
                }
            }
            return -1;
        }
    
    }

    二分查找  折半查找

    二分查找

       请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。

    思考: {1,8, 10, 89, 1000, 1000,1234} 当一个有序数组中,有多个相同的数值时,如何将所有的数值都查找到,比如这里的 1000.

    思路分析

    二分查找的代码

    package com.atguigu.search;
    
    import java.util.Arrays;
    
    public class InsertValueSearch {
    
            public static void main(String[] args) {
    
            
            int arr[] = { 1, 8, 10, 89,1000,1000, 1234 };
            
            
            int index = binarySearch(arr, 0, arr.length, 1);
            System.out.println("index = " + index);
            
            //System.out.println(Arrays.toString(arr));
            }
            
            public static int binarySearch(int[] arr, int left, int right, int findVal) {
                    System.out.println("二分查找被调用~");
                    // 当 left > right 时,说明递归整个数组,但是没有找到
                    if (left > right) {
                            return -1;
                    }
                    int mid = (left + right) / 2;
                    int midVal = arr[mid];
    
            if (findVal > midVal) { // 向 右递归
                    return binarySearch(arr, mid + 1, right, findVal);
            } else if (findVal < midVal) { // 向左递归
                    return binarySearch(arr, left, mid - 1, findVal);
            } else {
    
            return mid;
            }
    
            }
    
    }
  • 相关阅读:
    课程总结第十一周
    用户场景分析
    团队冲刺10
    课程总结第十周
    团队冲刺09
    梦断代码阅读笔记03
    转发和重定向的区别
    request
    servletConfig
    servlet
  • 原文地址:https://www.cnblogs.com/cnng/p/12360787.html
Copyright © 2020-2023  润新知