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

          二分查找又叫折半查找

      优点是比较的次数少,查找速度快,平均性能好

      缺点是要求查找的列表为有序的(上升或者下降)

      查找思路是 (1)首先记录列表中间位置的关键字与要查找的关键字比较,如果两者相等,则证明查找成功;

            (2)如果两个关键字不相等,首先将列表以中间位置关键字分成前后两个子列表,如果带查找关键字大于中间位置关键字,则查找后一子列表,反之查找前一字表.

            (3)重复以上过程,直到查找成功,或者直到子表不存在,此时查找不成功.

      JAVA代码实现

     1 /**
     2      * 二分法 java实现
     3      * 
     4      * @param sourceArray
     5      * @param target
     6      * @return
     7      */
     8     public static int binarySearch(Integer[] sourceArray, int target) {
     9         int low = 0;
    10         int high = sourceArray.length - 1;
    11 
    12         while ((low <= high) && (low <= sourceArray.length - 1)
    13                 && (high <= sourceArray.length - 1)) {
    14             int middle = low + ((high - low) >> 1);    //二分查找算法精华
    15             if (target == sourceArray[middle]) {
    16                 return middle;
    17             } else if (target < sourceArray[middle]) {
    18                 high = middle - 1;
    19             } else {
    20                 low = middle + 1;
    21             }
    22         }
    23         return -1;
    24     }

      解释:

         int middle = low + ((high - low)>>1);

         这段代码的意思是找到一个数的中间位置,>>的意思为右移,1是右移一位.

         例子:

            15 >> 2     这里将15的十进制---->二进制解释

            15的十进制是00001111  如何算:

            15÷2 = 7 余1  ↑得出

              7÷2 = 3 余1  ↑逆向

              3÷2 = 1 余1  ↑向上

              1÷2 = 0 余1  ↑这里

            由于位数不够,这里要补位加了4个0,所以得出0000 1111

            0000 1111向右移2位得出 0000 0011, 将0000 0011转换  十进制,  如何转换

            0 0 0 0 0 0 1 1  二进制源数据  

              7 6 5 4 3 2 1 0 下标

            (0*2^7) + (0*2^6) + (0*2^5) + (0*2^4) + (0*2^3) + (0*2^2) + (1*2^1) + (1*2^0)  =  3;

            解释:二进制转换到十进制,比如下标是1 , 那就是2的1次方 乘 1( 1 代表二进制源数据) ,

            得出 15 >> 2  = 3 

            

        如有错误,欢迎指正

  • 相关阅读:
    动态表单实现客户端二次过滤及字段汇总统计
    开放一些常见功能的工具类代码
    动态表单
    客户中增加按钮提前判断是否撞单 并提示
    通过插件来对打印数据进行处理
    mac 升级10.12 php debug 环境 跑不起的解决 解决方案
    感觉世界变化太快...
    Mac 升级一次,php 就崩溃一次,有味,苹果....
    http://s22.app1105796624.qqopenapp.com/
    unity 2d 游戏优化之路 遇坑记录
  • 原文地址:https://www.cnblogs.com/duwenlei/p/4702019.html
Copyright © 2011-2022 走看看