二分查找法
首先定义一个数组:
int [] arr ={1,5,6,8,9,15,20};
定义一个要查找的数:
Scanner sc = new Scanner(system.in);
sout(“请输入您要查找的数:”);
int x =sc.nextInt();
循环查找:
int left = 0; //查找区间的左边界下标
int right = arr.length-1;//查找区间的右边界下标
int mid =(left+right)/2 //定义一个中间数下标
boolean flag =false ; //默认找不到
while(left<=right){
if(x==arr[mid]){
sout(“找到了!下标为:"+mid);
flag = true;
break;
}else if(x<arr[mid]){//新的查找区间在中间数的左边
right = mid-1;
}else if(//新的查找区间在中间数的右边
left = mid+1;
}
mid=(left+right)/2;//重新定义中间数
}
sout(!flag?“找不到!”:"")
知识总结:
二分查找法只能在有序数组中使用,它的原理是定义一个查找区间,首先这个查找区间的左边界是第一个元素,下标为0,右边界是数组的最后一个元素,下标为数组长度-1.找到这个数组的中间数(左边界下标加右边界下标除2)和你要查找的数进行比较,如果相等,你查找的数就是这个数组的中间数,如果不是的话分为两种情况:1.中间数比你要查找的数大,由于数组数有序数组(默认升序),那么你要查找的数在中间数的左边,那么这是就出现了一个新的查找区间,左边界不变,右边界下标为中间数下标-1,重新定义中间数,等于新的查找区间左边界加右边界下标出2。2.中间数比你查找的数小,那么你要查找的数在中间数的右边,那么这是就出现了一个新的查找区间,右边界不变,左边界下标为中间数下标+1,重新定义中间数,等于新的查找区间左边界加右边界下除2。如此循环,直至找找你要查找的那个数。