码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找

时间:2019-03-15 23:12:25      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:https   blog   bin   元素   arc   atl   length   boolean   递归   

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

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

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

递归实现:

 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行,通过位移计算中点的方法

二分查找

标签:https   blog   bin   元素   arc   atl   length   boolean   递归   

原文地址:https://www.cnblogs.com/greatLong/p/10539954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!