zoukankan      html  css  js  c++  java
  • 4.20Java二分法查找

    4.20Java二分法查找

    什么是二分法查找

    二分法检索(binary search)称折半检索

    二分法查找的基本思想

    前提:

    • 数组中的元素从小到大有序的存放在数组(array)中

    步骤:

    • 将给定值key与数组中间位置元素的关键码(key)比较

    • 如果相等,检索成功

    • key小,在数组前半段继续二分查找

    • key大,在数组后半段进行二分查找,直到索引成功

    对于有序数组而言,二分查找的效率是比较高的

    实例:

    package com.array;

    import java.util.Arrays;

    /**
    * 测试二分法查找,折半检索,通过值找索引
    * @author Lucifer
    */
    public class TestBinarySearch {
       public static void main(String[] args) {

           /*测试源数组*/
           int[] arr = {30,20,50,10,80,9,7,12,100,40,8};

           /*
           1.排序---不用冒泡排序,用工具类方法
           2.定义检索的范围---定义两个变量,起始位置、结束位置
            */
           Arrays.sort(arr);

           //要查找的值
    //       int value = 10;

           System.out.println(Arrays.toString(arr));
           System.out.println(myBinarySearch(arr,-1));

      }

       /*封装返回值*/
           /*
           传进来的值进行查找
           在arr数组中查找
           这样就定义了形参
            */
       public static int myBinarySearch(int[] arr, int value){

           /*测试二分查找*/

           //起始位置
           int low = 0;

           //结束位置
           int high = arr.length - 1; //最大索引值

           //循环条件
           while (low <= high){

               //定义中间索引值
               int mid = (low + high)/2;

               //相等说明找到了,直接返回值
               if (value == arr[mid]){
                   return mid;
              }

               //如果值比中间索引值要大,说明要从中间索引向后找,所以起始位置索引要变成中间索引值+1
               if (value > arr[mid]){
                   low = mid + 1;
              }

    //           //如果值比中间索引值小,说明要从中间索引向前找,所以起始位置索引要变成中间索引值-1
    //           if (value < arr[mid]){
    //               low = mid - 1;
    //           }

               //如果值比中间索引值小,说明要从中间索引向前找,所以起始位置索引要变成中间索引值-1
               if (value < arr[mid]){
                   high = mid - 1;
              }
               /*
               注意这里是high最大值发生变化不是最小值发生变化
               如果是写最小值low变化在进行到第三次while循环的时候
               从low到high的元素数量变成偶数,通过(low + high)/2取得的mid一直为8
               low就会始终为7
               所以程序会出现死循环,运行不下去
                */

          }
           //没有找到返回-1
           return -1;
      }
    }

     

     

     

    It's a lonely road!!!
  • 相关阅读:
    点击对应不同name的button,显示不同name的弹窗(弹窗功能)
    点击添加本地图片的前端效果制作
    巧用margin/padding的百分比值实现高度自适应(多用于占位,避免闪烁)
    移动端取消touch高亮效果
    手机网站的几点注意
    图片自动切换+链接
    使用DOM的方法获取所有li元素,然后使用jQuery()构造函数把它封装为jQuery对象
    使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息
    利用jQuery扩展接口为jQuery框架定义了两个自定义函数,然后调用这两个函数
    jQuery链式语法演示
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14682614.html
Copyright © 2011-2022 走看看