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

    二分查找又称折半查找法,是一种重要的查找算法。它的主要的应用是从一个给定的序列中查找指定的元素,二分查找的原理比较简单此处不再赘述。

    从实现的角度看,有递归方法和非递归方法。

    下面分别给出二分查找的递归实现和非递归实现方法:

    递归实现:

     1     static boolean binarySearch(int target, int[] list, int low, int high) {
     2         if (low > high)
     3             return false;
     4         else {
     5             int mid = low + ((high - low) >> 1);
     6             if (list[mid] > target)
     7                 return binarySearch(target, list, low, mid - 1);
     8             else if (list[mid] < target)
     9                 return binarySearch(target, list, mid + 1, high);
    10             else
    11                 return true;
    12         }
    13   }

    注意第2行是low>high而不是low>=high, 这是边界条件

    非递归实现:

     1     static boolean binarySearch(int target, int[] list) {
     2         int left = 0;
     3         int right = list.length - 1;
     4         while (left <= right) {
     5             int mid = left + ((right - left) >> 1);
     6             if (list[mid] == target) {
     7                 return true;
     8             } else if (list[mid] > target) {
     9                 right = mid - 1;
    10             } else if (list[mid] < target) {
    11                 left = mid + 1;
    12             }
    13         }
    14         return false;
    15     }

    这里面容易出错的地方有:

    1. 代码第4行的判断条件是left<=right, 如果写成left<right, 则将造成要查找的数如果是序列的最后一个查找不成功,如从1,2,3,4中查找4;

    2.代码第5行,通过位移计算中点的方法

    TALK IS CHEAP, SHOW ME THE CODE
  • 相关阅读:
    造数--存储过程,循环
    一句话搞定python六剑客
    数据库基本操作--增删改查
    session与cookie区别与联系
    正则表达式中 group groups区别
    迭代总结(随时更新)
    postman抓包
    linux常用命令
    抓包
    jdk 11特性
  • 原文地址:https://www.cnblogs.com/greatLong/p/10539954.html
Copyright © 2011-2022 走看看