• java二分查找(含二分查找代码)


    目录

    一:二分查找的条件

    二:二分查找思想​​​​​​​

    三:二分查找代码(循环)

    四:二分查找代码(递归)


    一:二分查找的条件

    1.1 必须是顺序存储结构

    1.2 必须有序序列

    二:二分查找思想

    当min > max || max < min的时候没有找到

    不断的更改mid , 当mid所指向的值等于查找的值的时候查找成功

    首先看一个数组,需要对这个数组进行操作。需要对33进行查找的操作,那么target 的值就是33


    首先,对 left 的值和 right 的值进行初始化,然后计算 middle 的值
    left = 0, right = size - 1
    middle = (left + (right - left) / 2 )

     

    比较 nums[middle] 的值和 target 的值大小关系

    if (nums[middle] > target),代表middle向右所有的数字大于target
    if (nums[middle] < target),代表middle向左所有的数字小于target
    既不大于也不小于就是找到了相等的值
    nums[middle] = 13 < target = 33,left = middle + 1

    见下图:


    循环条件为 while (left <= right)

    此时,left = 6 <= right = 11,则继续进行循环

    当前,middle = left + ((right - left) / 2),计算出 middle 的值
    计算出 middle 的值后,比较 nums[middle] 和 target 的值,发现:

    nums[middle] = 33 == target = 33,找到目标

    三:二分查找代码(循环)

    1. package look;
    2. public class BinarySearch {
    3. public static void main(String[] args) {
    4. int[] arr = new int[]{1,2,6,7,9};
    5. int i = search(arr, 1, 0, arr.length - 1);//(0 , 4)
    6. System.out.print(i);
    7. }
    8. public static int search(int[] arr, int target, int min, int max) {
    9. if(min > max || max < min) {
    10. return -1;
    11. }
    12. while(min <= max) {
    13. int mid = (min + max) / 2;
    14. if(arr[mid] == target) {
    15. return mid;
    16. }
    17. if(arr[mid] < target) {
    18. min = mid + 1;
    19. }else if(arr[mid] > target) {
    20. max = mid - 1;
    21. }else {
    22. return -1;
    23. }
    24. }
    25. return -1;
    26. }
    27. }

    四:二分查找代码(递归)

    1. package sort;
    2. import java.util.Arrays;
    3. public class InsertSort {
    4. public static void main(String[] args) {
    5. int[] arr = new int[] {1, 2, 3, 4, 5, 6};
    6. int i = select(arr, 0, arr.length - 1, 4);
    7. System.out.println(i);
    8. }
    9. public static int select(int[] array, int left, int right, int searchVal) {
    10. if(left > right || array[0] > searchVal || array[right] < searchVal) {
    11. return -1;
    12. }
    13. //插值查找
    14. // int mid = left + (right - left)*(searchVal - array[left])/(array[right] - array[left]);
    15. //二分查找
    16. int mid = (left + right)/2;
    17. int midValue = array[mid];
    18. if(midValue < searchVal) {
    19. return select(array, mid + 1, right, searchVal);
    20. }else if(midValue > searchVal) {
    21. return select(array, left, mid - 1, searchVal);
    22. }else {
    23. return mid;
    24. }
    25. }
    26. }

  • 相关阅读:
    关于 SAP 电商云 Spartacus UI Navigation Service 执行的一些明细
    一文解读如何应用 REST 对资源进行访问?
    error: failed to push some refs to ‘gitee.com:wavelet-aa/msb_-erp.git
    移动Web:Flex布局、移动端适配、视口、二倍图
    java111-日期时间格式化
    springboot大学生兼职网站毕业设计源码311734
    typeof的作用
    文心一言:文心大模型 4.0 即将发布
    海外代理IP是什么?如何使用?
    【数据结构-队列】双端队列
  • 原文地址:https://blog.csdn.net/qq_56127002/article/details/126429921