1.二分查找理论
-
先将数组排序(假设,按数值从小到大)
-
定义左边界和右边界
-
获取中间索引 = (左边界+右边界)/2
-
中间索引和查找的值进行比较
-
如果二者相等,返回索引
-
如果中间索引小于查找的值,那左面边界值变为:原中间索引+1
-
如果中间索引大于查找的值,那以右边界值变为:原中间索引-1
-
如果左索引>右索引 break;
2.代码如下
public class 二分查找 {
public static void main(String[] args) {
/**
* 前提数组是有序的
* 1.先排序
* 2.挑中间值,与要查询的数比较,>的从后查找,<的从前查找
* 3.循环
*/
//二分查找
int [] arr = {1,5,6,12,19,30,45,65,89,78,123,125,156};
int target = 5; //要查找的值
int index = fangfa(arr,target);
System.out.println(index);
}
private static int fangfa(int[] arr, int target) {
//left border
int l = 0;
//right border
int r = arr.length-1;
//中间索引
int m;
while(l<=r){
m=(l+r)/2;
if(arr[m] == target){
return m;
}else if(arr[m]>target){
r = m-1;
}else if(arr[m]<target){
l = m+1;
}
}
return -1;
}
}