1.二分查找
前提:数组为有序。
步骤:1.找到中间值,将数组分为三部分,a[0,mid-1],a[mid],a[mid+1,high];
2.若等于a[mid], 返回mid;
3.小于a[mid],在a[0,mid-1]中查找;
4.大于a[mid],在a[mid+1,high]中查找;
循环或者递归来实现。
//循环 public static int search1(int [] array, int k){ int low=0; int high=array.length-1; while (low<=high){ int mid=(low+high)/2; if(array[mid]==k)return mid; if(array[mid]>k){ high=mid-1; }else{ low=mid+1; } } return -1; } //递归 public static int search2(int [] array, int k,int begin, int end){ int mid=(begin+end)/2; if(array.length==0||begin>end||k>array[end]||k<array[begin]){ return -1; } if(data<array[mid]){ return search2(array,k,begin,mid-1); }else if(data>array[mid]){ return search2(array,k,mid+1,end); }else{ return mid; } }