二分搜索的递归方法
所要搜索的数值x从控制台输入
所要查找的数组从文件读入,第一行为数组数字个数,第二行为数组内数值
package com.example.twoss;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
//二分搜索的递归方法
public class DiGui {
private static int n;
private static int[] a;
public static int efss(int left,int r ,int x,int a[])
{
while(left<=r) {
int middle=(left+r)/2;
if(x==a[middle]) {
return middle;
}
if(x>a[middle]) {
return efss(middle+1,r,x,a);
}else {
return efss(left,middle-1,x,a);
}
}
return -1;
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println("请输入你所希望查找的数值:");
Scanner scanner = new Scanner(System. in );
int x=scanner.nextInt();
try {
File file=new File("./input.txt");
Scanner input = new Scanner(file);
while (input.hasNext()) {
//数组中数字的个数
n = input.nextInt();
a = new int[n];
for(int i=0; i<n; i++) {
a[i]=input.nextInt();
}
}
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
int pd = efss(0,n,x,a);
if(pd!=-1) {
System.out.println("该数值的数组下标为"+pd);
}else {
System.out.println("数值"+x+"不在该数组中");
}
}
}
附:
二分搜索的非递归方法