有序数列中查找(这里讲的是有序数列,无序数列直接使用循环)
先和中间数查找,比较大小再和边上的查找
1.直接编写,设置多个变量,传入要查找的数组和数值
public static int binarySearch2(int[] s,int target){
int left=0;
int right=s.length-1;
while(true){
int mid=(left+right)/2;
if(target<s[mid]){
right=mid-1;
}else if(target>s[mid]){
left=mid+1;
}else{
return mid;
}
if(mid==left||mid==right){
return -1;
}
}
}
2.利用递归:需要传入左右界限用于递归。
public class Erfen {
public static int binarySearch(int[] s,int left,int right,int target){
if(left<right){
int mid=(left+right)/2;
if(target==s[mid]){
return mid;
}else if(target<s[mid]){
return binarySearch(s, left, mid-1, target);
}else{
return binarySearch(s, mid+1, right, target);
}
}
return -1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] s={1,3,5,8,44,88,0,22,11,44,22};
System.out.println(Erfen.binarySearch(s, 0, s.length, 5));
}
}