二分查找的算法实现
需求:在对有序数组A内,查找值target元素
-
如果找到返回索引
-
如果未找到返回-1
1.算法描述:
实现二分查找的条件:数组必须是排序好顺序的
前提:给一个含有n个元素的有序数组A,满足A0<=A1<=A2<=A3...<=An-1,和一个要查找的target元素
-
设置前指针i=0,和后指针j=n-1(设置这两个指针,为了在整个数组(i~j)中操作)
-
如果i>j,结束查找,没找到
-
设置m=floor((i+j)/2),m为中间索引,floor()向下取整(因为在java语言中 int类型对于小数直接舍去小数,所以不用多余的操作)
-
如果target<Am,设置j=m-1,返回到第二步
-
如果Am<target,设置i=m+1,返回到第二步
-
如果Am=target,结束查找,找到了
2.二分查找的代码实现
public static int binarySearch(int [] arr,int target){ //1.定义前指针和后指针 int i=0; int j=arr.length-1; while (i<=j){//两个指针在相同位置,也能比较 i~j int m=(i+j)/2;//中间m if(arr[m]<target){//target元素在右边 i=m+1; }else if(target<arr[m]){//target元素在左边 j=m-1; }else { return m; //返回找到的元素 } } return -1;//没有找到 }