二分查找-Java
概念
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
代码
查找目标数据是否存在数组中,存在返回下标,不存在返回-1
public static int binarySearchDemo(int[] arr, int target) {if (arr == null || arr.length == 0) {return -1;}int pre = 0;int last = arr.length - 1;int mid;while (pre <= last) {mid = (pre + last) >>> 1;if (arr[mid] < target) {pre = mid + 1;} else if (target < arr[mid]) {last = mid - 1;} else {return mid;}}return -1;}
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
public static int searchInsert(int[] arr, int target) {if (arr == null || arr.length == 0) {return 0;}int pre = 0;int last = arr.length - 1;int mid = -1;while (pre <= last) {mid = (pre + last) >>> 1;if (arr[mid] < target) {pre = mid + 1;} else if (target < arr[mid]) {last = mid - 1;} else {return mid;}}return pre;}