二分搜索
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));
}
}
结果显示:
二分搜索算法运用的是分治策略。分治法的基本思想:讲一个规模为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));
}
}
结果显示:
相关文章推荐
- [BZOJ 1592] [Usaco2008 Feb] 路面修整
- Pollard's Rho Algorithm——求正整数的质因数
- JS没有重载(读书笔记)
- AndroidStudio使用札记
- spring的生命周期(参考)
- 书单
- YY项目之TabLayout自定义Tab的title
- Vim配置
- 《算法(第四版)》排序-----插入排序
- 成为Web开发人员的7个简单步骤
- Play Framework 2.5 sbt-fork-run-plugin;2.5.1: not found
- leetcode---Counting Bits
- [BZOJ 4439] [swerc 2015] Landscaping
- Windows平台分布式架构实践 - 负载均衡
- 算法实例-C#-快速排序-QuickSort
- JaveWeb中实现分页的总结
- 浅谈block(2)
- Java 1.7 ReentrantLock源码解析
- Java Web 通过CKEditor实现在线编译器
- 4种常见的屏幕自适应解决方案