二分查找

二分查找(也称折半查找),仅适用于有序的顺序表。

基本思路是:将给定的值 key 与表中中间位置元素的关键字比较,

         若相等,则查找成功,返回该元素的存储位置;

         若不等,根据其大小关系,在中间元素的左半部或者右半部进行查找;

      一步步缩小范围,直到查到为止。若没查到,则查找失败。

推荐下面这条链接,liweiwei1419大神的分析,主要是边界的判断。

https://leetcode-cn.com/problems/search-insert-position/solution/te-bie-hao-yong-de-er-fen-cha-fa-fa-mo-ban-python-/

 

 1 public class Binary_Search {
 2     public static int searchInsert(int[] nums,int target){
 3         //要取中间元素,要通过来头元素和结尾元素求得
 4         int low = 0;
 5         int high = nums.length - 1;
 6         int mid;
 7 
 8         //循环查找target
 9         while (low <= high){
10             mid = (low + high) / 2;
11             //mid 与 target 比较
12             if(nums[mid] == target){ //相等 -> 找到
13                 return mid;
14             } else if(nums[mid] > target){//中间元素比 目标值大 -> 在左半部分
15                 high = mid - 1;
16             } else {//中间元素比 目标值小 -> 在右半部分
17                 low = mid + 1;
18             }
19         }
20         //查找结束,没找到,返回 -1
21         return -1;
22     }
23 
24     public static void main(String[] args) {
25         int[] nums = {1,3,4,5};
26         int i = searchInsert(nums, 5);
27         int j = searchInsert(nums, 7);
28         System.out.println(i);
29         System.out.println(j);
30     }
31 }

 

posted @ 2021-01-05 01:27  peanut_zh  阅读(97)  评论(0编辑  收藏  举报