使用二分查找算法的前提:必须是一个有序的数组
假如有这么一个需求:定义一个函数接收一个数组对象和一个要查找的目标元素,函数要返回该目标元素在
数组中的索引值,如果目标元素不存在数组中,那么返回-1表示。
其实思路有很多,但是二分查找算法时间复杂度是最低的。
目标数组:int[] arr = {12,16,19,23,54};
算法实现思路见图:
算法实现代码:
public static int BinarySearch(int[] arr, int target){
int max = arr.length-1;
int min = 0;
int mid = (max+min)/2;
while(true){
if(target>arr[mid]){
min = mid+1;
}else if(target<arr[mid]){
max = mid -1;
}else{
//找到了元素
return mid;
}
//没有找到的情况
if (max<min){
return -1;
}
//重新计算中间索引值
mid = (min+max)/2;
}
}