二分查找

1. 上下限目的是保证能遍历数组的全部元素,因此上下限的初始值取的是数组的下标而非数组的length

2. while循环的条件是 upper 不小于 lower

3. 当前下标命名一开始自己起的是posi,根据其赋值 (lower+upper)/2 ,命名mid还是挺恰当

		          // 0 1 2 3 4 5  6  7  8  9  10
		int[] arr = {1,2,4,5,7,10,12,15,16,18,31};
		System.out.println(binFind(arr, 5));
		
		
	}
	
	static int binFind(int[] arr, int target) throws InterruptedException{
		
		int lower = 0;
		int upper = arr.length - 1;

		
		while(upper >= lower){
			int mid = (lower + upper)/2;

			if(arr[mid] > target){
				upper = mid - 1;
			}else if(arr[mid] < target){
				lower = mid + 1;
			}else{
				return mid;
			}
		}
		
		return -1;
		
	}

}

  

原文地址:https://www.cnblogs.com/ydxblog/p/5649857.html