工作原理
它又被称之为折半查找法。将数组中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子数组,否则进一步查找后一子数组。重复以上过程,直到找到或找不到位置。
与线性查找法的对比
线性查找法遍历数组中的每一个元素,从一段开始逐一检查每个元素,直到找到所需元素位置。
二分查找法则不需要,查找次数少,工作效率高。
二分查找法的前提
数组必须是有序的!!!!!!!!
例题
输入一个数字,找到这个数字在数组中的位置。
代码块
import java.util.Scanner;//导入Scanner类,获取用户的输入
public class BinarySearch{
public static void main(String[] args){
int [] array={1,2,3,4,5,7,9,13,14,18};//定义一个数组
System.out.println("请输入要查找的数");
Scanner input = new Scanner(System.in);
int number=input.nextInt();
int index=-1;//保存找到数所在数组中的下标,找不到等于-1
int start=0;//起始下标
int end=array.length-1;//终止下标
int middle;//定义一个中间下标
while(start<=end){
//找到中间下标所对应的元素值
middle=(start+end)/2;
if(number==array[middle]){
index=middle+1;
break;
}
//假如要查找的那个数大于中间比较的那个数,
//去掉左边的那个数
if(number>array[middle]){
start=middle+1;
}
//保留左边的数,去掉右边的数
if(number<array[middle]){
end=middle-1;
}
}
//判断下标是否为-1
if(index==-1){
System.out.println("not find");
}else{
System.out.println("find at"+index);
}
}
}
运行结果
优缺点
优点:二分查找法能够在数组内元素有序的前提下快速找到所需要的值
缺点:数组如果是无序的话,需要先排序,让数组有序,需要的时间比for循环要长。
总结
以上就是用java实现二分查找法的简单实例,当然在java中只需要导入arrays类,然后引用binarySearch()方法即可实现。