算法之旅----二分查找
📅 发表于 2020-11-15 · 更新于 2021-02-05
介绍二分查找
二分查找是一种算法,其输入的是一个有序的元素列表。如果要查找的元素包含在列表内,二分查找就返回其位置;否则返回null
案例
随便想一个1-100的有序数组
你的目标是以最少的次数猜到这个数字,每次猜测后,会提示你小了,大了或对了。
假设你从1开始依次往上猜,这是简单查找,简单来说又叫傻找。每次猜测只能排除一个数字。
如果我给出的数字是100,你需要猜测100次,效率极低
更佳的查找方式
如果我们取中从50开始,提示大了,那将排除一半的数字。
使用二分查找时,你猜测的是中间的数字,从而每次都将余下的数字排除一半!
代码(Java)
java
public class BinarySearch {
//一个按顺序的数组
static int[] a = {1,2,3,4,5,6};
public static void main(String[] args) {
System.out.println(b(a,1));
}
//b方法,返回值object,传入数组和要查询的数
public static Object b(int[] list,int item){
//low和hight是查询范围
int low = 0;
int hight = a.length;
//范围没缩小到只包含一个元素就一直循环
while (low<=hight){
//检查中间的元素
int mid = (low+hight)/2;
int guess = mid;
//找到了元素
if (guess==item){
return mid;//直接返回找到的元素
}
//未找到元素
if (guess>item){
//查询的元素大了,将元素减少1,直到找到这个元素
hight = mid -1;
}else {
//查询的元素小了,将元素加1,直到找到这个元素
low = mid +1;
}
}
//数组里没有要找的元素就返回none
return "none";
}
}