概述:
二分查找一个顺序数组,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
代码:
public class Er { // 二分查找(只针对有序数组)(升序) //mid 为中间值,left 为数组第一个元素,right为数组最后一个元素 //找到数组的中间值 mid,将数组截断为两个子数组,判断 target 与中间值的大小,比中间值小则在左边小的数组, // 则左边的 left 不变,right变为 mid-1,若比中间值大则在右边的大数组,left 变为 mid+1,right 不变 //二分查找就三种情况,比中间值大、比中间值小、等于中间值 public static int erfen(int[] arr,int target){ int left=0; //左索引 int right=arr.length-1; //右索引 while (left<=right){ // int mid=left+(right-left)/2; if(target>arr[mid]){ //比中间值大 left=mid+1; }else if(target<arr[mid]){ //比中间值小 right=mid-1; }else{ return mid;//等于中间值 } } return -1;//找不到就返回 -1 } public static void main(String[] args) { int arr[]={1,2,3,4,5,6,7,8,9}; int n=erfen(arr,1); System.out.println("n下标为 = " + n); } }