zoukankan      html  css  js  c++  java
  • Java数据结构学习Day3_递归_二分查找问题

    Java递归——二分查找问题

    二分查找

    前提:查找的数组必须是有序的
    查找过程:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
    图解:

    代码如下

    package Ivan.Search;
    
    import java.util.*;
    
    
    //使用二分查找的前提是该数组是有序的
    public class BinarySearch {
        public static void main(String[] args) {
            int[] arr = {1, 3, 4, 5, 6, 7, 3, 34, 44, 5, 6, 7, 89, 23, 34, 6, 72, 60};
            Arrays.sort(arr);
            int temp = binarySearch(arr, 43, 0, arr.length - 1);
            System.out.println(temp);
        }
    
        //二分查找算法
    
        /**
         * @param arr   需要查找的数组
         * @param n     需要查找的值
         * @param left  左边界
         * @param right 右边界
         * @return 找到返回下标,没找到返回-1
         */
        public static int binarySearch(int[] arr, int n, int left, int right) {
            if (n < arr[left] || n > arr[right] || left > right) {      //判断是否越界
                return -1;
            }
            int mid = (left + right) / 2;
            int midValue = arr[mid];
            if (midValue < n) {
                return binarySearch(arr, n, mid + 1, right);
            } else if (midValue > n) {
                return binarySearch(arr, n, left, mid - 1);
            } else {
                return mid;
            }
    
        }
    }
    
    

    运行结果

  • 相关阅读:
    HttpWatch 有火狐版本?
    JQgrid的最新API
    jqgrid
    JSON的学习网站
    array创建数组
    Numpy安装及测试
    SQLite3删除数据_7
    SQLite3修改数据_6
    SQLite3查询一条数据_5
    SQLite3查询所有数据_4
  • 原文地址:https://www.cnblogs.com/mlz031702145/p/13094166.html
Copyright © 2011-2022 走看看