语言:java
前提条件:数组必须有序
//二分查找法 / 折半查找法
class BinarySeacheDemo
{
public static void main(String[] args)
{
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int index = binarySearch(arr, 0); //index变量接收返回的索引(即数组下标)
//arr为传入的数组
//0为所需查找的元素
System.out.println(index);
}
//从数组arr中搜索key这个元素,若找到返回索引,否则返回-1
static int binarySearch(int[] arr, int key){
int low = 0; //低位指针
int high = arr.length - 1; //高位指针
int mid = 0, //中间指针
int midVal = 0; //中间比较变量,用于存储搜索范围中间的值
while(low <= high){
mid =(low + high) / 2; //mid =(low + high) >> 1 二进制向右移一位,
//相于十进制数除以二
midVal = arr[mid]; //存储搜索范围中间的值
if(midVal > key){ //如果搜索范围中间的值大于key,高位指针向低移动
high = mid - 1;
}else if(midVal < key){ //如果搜索范围中间的值小于key,低位指针向高移动
low = mid + 1;
} else{
return mid; //midVal = key返回索引
}
}
return -1; //未找到返回-1
}
}
原理如图: