二分查找
二分查找(也称折半查找),仅适用于有序的顺序表。
基本思路是:将给定的值 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 }