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;
            }
    
        }
    }
    
    

    运行结果

  • 相关阅读:
    一.execl数据驱动
    六.对XML文件的读取
    电脑远程控制的几种方式
    单元测试、集成测试、系统测试区别
    Jmeter简单的压力测试
    Python+selenium 定位非select类型的下拉框和定位时间控件
    fiddler(二)工具栏常用功能
    web自动化中,界面元素定位不到如何解决
    Fiddler (一)介绍
    Fiddler (四) 实现手机的抓包
  • 原文地址:https://www.cnblogs.com/mlz031702145/p/13094166.html
Copyright © 2011-2022 走看看