二分查找
1.定义3个下标
lo=0
hi=a.length-1
mid先复制
2.当lo<=hi
3.计算中间位置mid=(lo+hi)/2
4.比较中间位置mid的值>t,hi定位到mid-1
5.如果mid的值<t, low定位到mid+1
6.否则,直接返回mid的值
7.找不到数据,返回特殊值-1
import java.util.Arrays;
public class ErFen {
public static void main(String[] args) {
int []a={11, 46, 56, 56, 94};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
int t=46;
//二分查找
int index=binarySearch(a,t);
if(index!=-1)
System.out.println(index);
else
System.out.println("没找到");
}
private static int binarySearch(int[] a, int t) {
/*
* 46
*
* 中间mid=(lo+hi)/2
* [11, 46, 56, 56, 94]
* lo
* hi
* mid
*
* lo
* mid
* hi
*
* 1.定义3个下标
* lo=0
* hi=a.length-1
* mid先复制
* 2.当lo<=hi
* 3.计算中间位置mid=(lo+hi)/2
* 4.比较中间位置mid的值>t,hi定位到mid-1
* 5.如果mid的值<t, low定位到mid+1
* 6.否则,直接返回mid的值
* 7.找不到数据,返回特殊值-1
*/
int lo=0,hi=a.length-1;
int mid;
while(lo<=hi){
mid = (lo+hi)/2;
if(a[mid]>t)//中间位置大
{
hi=mid-1;
}
else if(a[mid]<t)//中间位置小
{
lo=mid+1;
}
else
{
//找到了
return mid;
}
}
return -1;
}
}
运行结果
[11, 46, 56, 56, 94]
1