java代码实现二分查找
key是13,如下图:
middle=(0+6)/2=3;
下标为3的值是15>key,所以要将middle向前移动一位作为新的high,因为是有序数组,后面的元素就无需再考虑了,如果中间值比key小,将middle向后移一位做新的low,如果low>high了则说明该数组没有值为k的。(向右为后)
public static void main(String[] args) { int arr[]={12,13,14,15,16,17,19}; // int key=13; // int index=binary_search(arr,key); // System.out.println(index); int index2=binary_search2(arr,15,0,arr.length-1); System.out.println(index2); } public static int binary_search(int arr[], int key){ //非递归方法 int low=0; int high=arr.length-1; int middle=0; if(key<arr[low]||key>arr[high]||low>high){ return -1; } while(low<=high){ middle=(low+high)/2; if(arr[middle]>key){ high=middle-1; }else if(arr[middle]<key){ low=middle+1; }else { return middle; } } return -1; } public static int binary_search2(int arr[],int key,int low,int high){ //递归方法 //不要在这里将low和high初始,否则会出现栈溢出的错误,因为每调用一次这个方法,low和high的值又是下面两个,没有进行更改,可能会造成死循环 // low=0; // high=arr.length-1; if(key<arr[low]||key>arr[high]||low>high){ return -1; } int mid=(low+high)/2; if(arr[mid]>key){ return binary_search2(arr,key,low,mid-1); }else if(arr[mid]<key){ return binary_search2(arr,key,mid+1,high); }else { return mid; } }
下一篇:
Java中的类和对象之代码块