1.二分查找算法
给定的条件:给定的有序数组A查找目标值为target,其中A标记为
数组序号从0开始,其下标最大为数组长度-1.
举例数组:5 14 22 30 31 41 44
条件:i>j i表示左边下标 j表示右边下标 i从5开始 j 从44开始
思想:每次计算其中间下标的值和target值进行对比,分为以下三种情况
middle=(i+j)>>>2 表示右边移一位
target<a[middle] j=m-1
a[middle]<target i=m+1
target=a[middle] 结束查找找到了
public class Main { public static void main(String[] args) { int[] a = {5,14,22,30,31,41,44}; System.out.println(binarySearchBasic(a,5)); System.out.println(binarySearchBasic(a,44)); int i=0; int j= Integer.MAX_VALUE-1;//求出最大下标 System.out.println("索引值:i="+i); System.out.println("索引值:j="+j); int m = (i+j)/2; System.out.println("索引值:(m+j)/2="+(m+j)/2); } //实现二分查找 public static int binarySearchBasic(int[] a,int target){ //二分查找基础版本 a待查找的有序数组 target目标值 //找得到返回索引 找不到返回-1 int left = 0; int right = a.length-1; while(left<=right){ int middle = (left+right)/2; if(a[middle]<target){ left = middle+1; }else if(target<a[middle]){ right = middle-1; }else{ return middle; } } return -1;//没有找到返回为-1 } }
标签:java,target,int,System,----,算法,查找,println,out From: https://www.cnblogs.com/hellotoworld/p/17936041.html