Java——二分查找
1、二分查找算法
1、介绍
二分查找(Binary search)也称折半查找,是一种效率较高的查找方法。但是,二分查找要求线性表中的记录必须按关键码有序,并且必须采用顺序存储。
2、演示
3、原理
二分查找算法的原理如下:
1. 设置查找区间:low = 0;high= n;
2. 若查找区间[low, high]不存在,则查找失败;否则转步骤3
3. 取中间位mid = (low + high) / 2;比较 target 与 arr[mid],有以下三种情况:
3.1 若 target < arr[mid],则high = mid - 1;查找在左半区间进行,转步骤2;
3.2 若 target > arr[mid],则low = mid + 1;查找在右半区间进行,转步骤2;
3.3 若 target = arr[mid],则查找成功,返回 mid 值;
4、实现
//二分查找算法
@Test
public void dichotomySearch(){
Integer[] arr = {1,3,5,8,12,56,90};
Integer index2 =upperBinarySearch(arr,12);
System.err.println(index2);
}
/**
*
* @param arr 有序数组
* @param data 需要查找的数据
* @return
*/
public static Integer upperBinarySearch(Integer arr[],Integer data){
int left = 0;//开始
int rigth = arr.length-1;//结束
while (left<=rigth){ //left ==rigth 区间仍然有效
int middle = (left+rigth)/2 ;//中间值
if(arr[middle]>data){//往左边找
rigth = middle-1;
}else if(arr[middle]<data){ //往右边找
left=middle+1;
}else{
return middle; //找到了
}
}
return -1; //没有找到返回-1
}