首先,我们实现如下需求:在数组中查找一个数字,返回该数字在数组中的索引值,否则返回-1;代码如下
public static void main(String args[]){ int[] arr = {1,2,3,4,5,6,7}; //定义数组arr int index = searchEle(arr,6); //调用方法searchEle,并传递参数arr和要找的数字6 System.out.println("元素所在索引为: "+index); } public static int searchEle(int[] arr,int tag ){ //定义方法,返回值为int for(int i = 0;i<arr.length;i++){ if(arr[i] == tag){ return i; } } return -1; } }
要找的元素为6,其索引值为5;我们不难发现要找到这个数字,在数组中要经过6次比较才找到。我们不妨换一种思路:
在一个有序的数组中,我们定义三个变量表示最小索引值,最大索引值和中间的索引值,然后将目标数字与中间的数字进行比较,不断缩短查找范围(注意的是,这只适用于有序的情况)
public static void main(String args[]){ int[] arr = {1,2,3,4,5,6,7}; int index = halfSearch(arr,1); System.out.println("索引值为: "+index); } public static int halfSearch(int[] arr,int target){ //定义三个变量表示最小,最大,中间的表示范围 int max = arr.length-1; int min = 0; while(min<=max){ int mid = (max+min)/2; if(target==arr[mid]){ return mid; }else if(target<arr[mid]){ max = mid-1; }else{ min = mid+1; } } return -1; }