二分搜索
来源:互联网 发布:找老婆知乎 编辑:程序博客网 时间: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));
}
}
结果显示:
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- Ros CV
- 编译执行的过程
- 机器学习算法的Python实现 (2):ID3决策树
- 码农小汪-Hibernate学习7-hibernate映射组件属性
- [BZOJ 4430] [NWERC 2015] 赌骆驼
- 二分搜索
- Atlantis(线段树)
- :css教程:css盒子模型及布局应用
- [BZOJ2073][POI2004]PRZ
- 面试时的自我简介要点
- 【Python】Python logging
- RabbitMQ消息队列中的几种典型问题再探
- 应用数学十大算法
- [leetcode]328. Odd Even Linked List