二分搜索

来源:互联网 发布:找老婆知乎 编辑:程序博客网 时间:2024/05/01 21:38

使用递归算法实现二分搜索。【输入:一个一维整型数组和一个待查询的值;输出:待查询值所在的位置,如果没有找到,则返回-1。】

二分搜索算法运用的是分治策略。分治法的基本思想:讲一个规模为N的问题分解为一个规模较小的子问题,这些子问题相互独立且与原问题相同。

注意:二分搜索时,数组是排好序的!

package cn.aaa;


import java.util.Scanner;


public class BinarySearch {
public static int BianrySearch(int a[],int left,int right,int k) {
int mid = (left+right)/2;
if(left>right)//程序结束条件:当下限大于上限时,程序结束,值没有找到
return -1;
else if(k==a[mid]) //查询的值等于数组中间的值时,返回返回mid值
return mid;
else if(k>a[mid])  //查询的值比数组中间的值大时,在数组的右半部分进行查询
return BianrySearch(a,mid+1,right,k);
else 
   return BianrySearch(a,left,mid-1,k); //查询的值比数组中间的值小时,在数组的左半部分进行查询
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一串整数并在输入时用英文逗号隔开:");//从键盘输入一个数组
String inputString=s.next().toString();
String stringArray[]=inputString.split(",");
int list[]=new int[stringArray.length];
  for(int i=0;i<stringArray.length;i++){
   list[i]=Integer.parseInt(stringArray[i]);
  }
System.out.println("请输入要查询的数:");
int num = s.nextInt();   //输入的要查询的数
int n = list.length;     //数组的个数
int dis = BianrySearch(list,0,n,num);  //查询的数在数组中的位置
if(dis==-1)  //因为数组的位置比实际位置小1,所有进行判断
  System.out.println("数目的位置为:"+dis);
else
System.out.println("数目的位置为:"+(dis+1));
}
}

结果显示:


0 0