您的位置:首页 > 其它

二分搜索

2016-04-01 22:50 288 查看
使用递归算法实现二分搜索。【输入:一个一维整型数组和一个待查询的值;输出:待查询值所在的位置,如果没有找到,则返回-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));

}

}

结果显示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: