非递归,利用循环
package file;
import java.util.Scanner;
public class Main {
public static void search(int[] a,int key){
int low=0;
int high=a.length-1;
int mid;
while(low<=high){
mid=(low+high)/2;
if(a[mid]==key){
System.out.println(mid);
return;
}
else if(a[mid]>key){
high=mid-1;
}
else{
low=mid+1;
}
}
return;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
System.out.println("输入数组长度:");
int len=in.nextInt();
System.out.println("输入数组:");
int[] a=new int[len];
for(int i=0;i<len;i++){
a[i]=in.nextInt();
}
System.out.println("输入key:");
int key=in.nextInt();
search(a,key);
}
}
递归方法
package file;
import java.util.Scanner;
public class Main {
public static int search(int[] a,int key,int start,int end){
if(start>end)
return -1;
int mid=(start+end)/2;
if(a[mid]==key){
System.out.println(mid);
return mid;
}
else if(a[mid]>key){
return search(a,key,start,mid-1);
}
else{
return search(a,key,mid+1,end);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
System.out.println("输入数组长度:");
int len=in.nextInt();
System.out.println("输入数组:");
int[] a=new int[len];
for(int i=0;i<len;i++){
a[i]=in.nextInt();
}
System.out.println("输入key:");
int key=in.nextInt();
System.out.println(search(a,key,0,len-1));
}
}
本文介绍了二分搜索算法的两种实现方式:非递归和递归。非递归方法使用循环进行元素查找,并通过更新搜索范围来定位目标值。递归方法则通过不断将搜索区间对半分割的方式找到目标元素的位置。
1064

被折叠的 条评论
为什么被折叠?



