二分查找要求查找的数据必须是有序的!
JAVA代码实现:
递归实现
import java.util.Scanner;
public class BinarySearch {
public static int getBinaryPosition(int[] a,int l,int h,int key){
if(key < a[l] || key > a[h] || l>h){
return -1;
}
int middle=(l+h)/2;
if(a[middle]>key){ //目标数在middle左边
return getBinaryPosition(a,l,middle-1,key);
}else if(a[middle]<key){ //目标数在middle右边
return getBinaryPosition(a,middle+1,h,key);
}
return middle;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String inp=sc.nextLine();
String[] sarry=inp.split(",");
int[] a=new int[sarry.length];
for(int i=0;i<a.length;i++){
a[i]=Integer.parseInt(sarry[i]);
}
int key=sc.nextInt();
int l=0;
int h=a.length-1;
int position=getBinaryPosition(a,l,h,key);
System.out.println(position);
}
}
非递归实现
import java.util.Scanner;
public class BinarySearch2 {
public static int getBinSearch(int[] a,int key){
int l=0;
int h=a.length-1;
while(l<=h){
int middle=(l+h)/2;
if(a[middle]>key){
h=middle-1;
}else if(a[middle]<key){
l=middle+1;
}else{
return middle;
}
}
return -1;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String inp=sc.nextLine();
String[] sarry=inp.split(",");
int[] a=new int[sarry.length];
for(int i=0;i<a.length;i++){
a[i]=Integer.parseInt(sarry[i]);
}
int key=sc.nextInt();
int position=getBinSearch(a,key);
System.out.println(position);
}
}