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

    运行结果

  • 相关阅读:
    腾讯实习前端工程师面经-一面-腾讯看点
    Redux的createStore实现
    GNU ARM 汇编基础
    python爬虫学习04-爬取贴吧
    python学习03-使用动态ua
    Python爬虫学习02--pyinstaller
    python爬虫学习01--电子书爬取
    简单的SQL语句学习
    微信小程序的五个生命周期函数
    python学习(12)使用正则表达式
  • 原文地址:https://www.cnblogs.com/mlz031702145/p/13094166.html
Copyright © 2020-2023  润新知