关于二分查找法(Java)
二分查找法是将一个有序数组平均分成两份,将其中间数和对应要查找的值进行比较;
例如现在我们将数组中最小的元素的下标设置为min
最大的元素的下标设置max
中间的元素下标mid=(max-min)/2+min
然后用预期要找的值value去进行对比
如果预期值比下标为mid的元素的值要大,则调整min的值为mid+1
如果预期值比下标为mid的元素的值要小,则调整max的值为mid-1
然后均需要重新计算mid值
直到min>max之前一直进行比较,直到找到对应的value值,并输出其下标
public class ArrayTools { public int binarySearch(int[] arr, int value){ //二分查找法,要定义mid,max,min int min=0; int max=arr.length-1; // int mid=(min+max)/2; //该种写法可能会导致值的溢出,所以采用下面的写法会更好 int mid=(max-min)/2+min; //由于不知道需要进行多少次循环,应使用while循环 while (max>min){//此处需要大于等于,避免只有两个元素时直接出现BUG //二分查找的前提是数组是有序的 if (value<arr[mid]){ //大了,调整max值和mid值 max=mid-1; mid=(min+max)/2; }else if(value>arr[mid]){ //小了。调整min值和mid值 min=mid+1; mid=(min+max)/2; }else { return mid; } } return -1; }
学习要有计划、代码要经常练习、学习之后要有输出、多交流、多总结、找出规律。
忌三天打鱼两天晒网、浅尝辄止、闭门造车