【面试:基础篇01:整数二分查找】
00.前言
大家好我是一名大二的学生,目前正在实习,在大佬@铁甲小宝同学的帮助下开始在csdn上更新博客,请多多指教。
关于我写的内容有任何问题还请指出,感谢各位。
01.简介
二分查找是查找算法的一种,在顺序情况下有着 log 2 N \log_2^N log2N良好的时间复杂度
02.算法步骤
在{1,3,5,6,7,9,13,25,34,61,88} 总共11个元素中 找到25的步骤,规定下标从0开始
- 首先我们选择下标0,10作为左右边界l,r 中间值mid=(l+r)/2,注意:这里的l+r均为整数 除2的结果若为小数向下取整
- 此时我们的mid=5,即元素9不等于25,然后我们令l=mid+1,注意:这里是mid+1而不是mid因为我们已经确定mid这个下标所对应的元素不等于25 所以我们之间从mid+1开始找就行
- 此时我们的l=6 r=10,mid=(l+r)/2=8 即元素34,此时34大于25,我们令r=mid-1
- 此时我们的l=6 r=7,mid=(l+r)/2=6 即元素13 令l=mid+1
- 此时我们的l=7 r=7,mid=(l+r)/2=7 即元素25 找到了元素25 此时返回对应下标7
可以看出我们总共查找了四次就查出了结果
03.算法实现
public static void main(String[] args) {
int[] a = {
1,3,5,6,7,9,13,25,34,61,88};// 排序好的数组
int res= 25;//要查找的数
int result = Search(a