思路:(1)先将数组内元素按从小到大顺序排好
(2)声明两个变量,一个最小值 low:0,一个最大值 high:数组.length-1,再在循环中声明一个变量 middle:(low +high)/2
(3)判断:如果 middle = 目标元素,return middle;如果 middle > 目标元素,high=middle-1;如果 middle< 目标元素,low=middle+1;
平均时间复杂度:O(log(n))
import java.util.Arrays; //二分法查找;(折半查找) public class BinarySearchTest { public static void main(String[] args) { int[] arr = {30,20,50,10,80,9,7,12,100,40,8}; int searchWord =40;//所要查找的数; Arrays.sort(arr); /**二分法查找之前,一定要对数组元素先进行排序!!!*/ System.out.println(Arrays.toString(arr)); System.out.println(searchWord+"元素的索引:"+binarySearch(arr,searchWord)); } public static int binarySearch(int[] array,int value){ int low = 0;//low--high是查找区间,low开始位置,high结束位置; int high = array.length - 1; while(low <= high){ int middle = (low+high) / 2; if(value == array[middle]){ return middle; } if (value < array[middle]){ high = middle-1; } if (value > array[middle]){ low = middle + 1; } } return -1;//如果array数组中没有要查找的value值,则返回-1; } }
© 著作权归作者所有