美文网首页
二分法查找

二分法查找

作者: 腹黑小叶子orz | 来源:发表于2017-08-02 20:42 被阅读0次

二分法查找是定义最小值和最大值,还有一个中间值。将得到的数字与中间数比较,如果大于中间数,把最小值改成中间值加1,如果小于最小值,就把最大值改成中间值减1.

假设中间值为mid,最大值为max,最小值为min,要找的值为find。

假设find > mid -----------> min = mid +1;

find < mid -------->max = mid - 1;

代码如下:class HalfSearch {
 public static void main(String[] args) {
  
  int[] arr = {12, 34, 56, 78, 90, 110, 119, 120, 911, 1024};//定义一个数组,用Scannery定义也可以,最后用for循环对数组中的数字进行赋值。

  int index = search(arr, 90);//此处的90是我们要找的数字。search是函数用int 定义一个变量进行接收。
  
  System.out.println(index);//打印出查找数字的下标
 }
 
 public static int search(int[] arr, int find) {
  //参数合法性判断
  if (arr == null || arr.length == 0) {
   System.out.println("Input Param is invalid!");
   return -1; //表示函数运行失败
  }
  
  int mid = 0;
  int indexMin = 0;
  int indexMax = arr.length - 1;
  
  mid = (indexMax + indexMin) / 2;
  
  while (arr[mid] != find) {
   if (arr[mid] < find) {
    indexMin = mid + 1;
   } else if (arr[mid] > find) {
    indexMax = mid - 1;
   }//当中间值不等于find时,进入while循环,将最大值和最小值进行对比,更改最值。
   
   if (indexMin > indexMax) {
    mid = -1;
    break;
   }//此处是没有找到数字的返回值因为数组下标应该是大于0的数字
   if (arr[mid] == 78) {
   System.out.println("找到了~~" + mid);
  }//查找的时候认为3种情况,一查找的数就是中间值,二不是中间值,以及三不在数组中,此处的情况值查找的数就是数组的中间数。
   
   mid = (indexMax + indexMin) / 2;//查找一次之后进行的再一次取中间值。否则进行一次还是原来的条件,造成死循环。
  }
  
  return mid;
 }
 
}

以下为推导过程,(没有找到值得推理)简而言之为数大中间值加1作为最小值,数小中间值减1作为最大值。
/*
     12, 34, 56, 78, 90, 110, 119, 120, 911, 1024
     
     118
     0 9 4
     indexMin = 5;
     indexMax = 9; 7;
     
     indexMax = 6;
     indexMin = 5; //5
     
     indexMin = 6;
     indexMax = 6; //6
     
     indexMax = 5;
     indexMin = 6; 
     表示没有找到
     推理过程
    */

相关文章

  • 二分法查找

    二分法基本查找 二分法遍历查找

  • 二分法查找

    二分法查找的前提是数组必须排序!!!二分法查找的前提是数组必须排序!!!二分法查找的前提是数组必须排序!!!二分法...

  • 刷前端面经笔记(九)

    1.JavaScript实现二分法查找? 二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找...

  • 数据结构-递归

    二分法查找

  • 查找算法

    三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表

  • 二分查找

    以二分法来提升查找效率 二分法查找到key的合适位置 put get delete 二分查找的查找操作为O(log...

  • 算法和排序

    1、线性查找 2、二分法查找 3、冒泡排序

  • 查找算法

    查找算法 顺序查找法 时间复杂度:O(n) 二分法查找 二分法查找适用于有顺序的序列 时间复杂度:O(n) 核心思...

  • 算法图解1-2/11

    原书作者 Aditya Bhargava 1 算法简介 1.1 二分法查找 二分法查找,正是猜数字游戏的玩法:A...

  • 前端面试之算法二分法

    使用二分法的前提是,目标数组的元素必须是有序排列的,所以二分法属于有序查找算法 二分法又称为“折半查找”,从数组的...

网友评论

      本文标题:二分法查找

      本文链接:https://www.haomeiwen.com/subject/hpvylxtx.html