二分法查找算法
来源:互联网 发布:表示网站域名的是 编辑:程序博客网 时间:2024/06/05 16:01
二分法查找算法主要思路:
首先是需要一个有序的数组a[];
在方法rank()中实现二分法查找。rank()方法有两个参数,分别是要查询的关键字key,有序的数组a[]。
rank(int key, int a[])方法:
需要知道数组的最低位元素位置和最高位元素位置,分别设置为int low = 0; int hight = a.length -1。
二分法的核心思想是通过与中间的参数进行比较,不断的缩减需要的范围,从而快速找到对应的关键字key是否在数组a中。
所以需要中间值mid = low + (hight - low)/2;
不断查询需要有个循环来实现,while()中的内容是要满足 low的值要小于或者等于hight的值,即while(low <= hight)。
满足循环之后,需要对key值与具体的中间值比较,主要有大于、小于或者是等于三种情况。
if(key < a[mid]) hight = mid -1;
if(key > a[mid]) low =mid +1;
if(key = a[mid)reutrn a[mid]
如果未找到符合要求的数字,则输出 return -1;
代码如下:
package chapter1.a1;
import edu.princeton.cs.algs4.In;
/**
* Created by fengjw on 2017/7/5.
* 二分法实现
*/
public class BinarySearch {
public static int rank(int key, int [] a){//两个参数,一个是要查找的关键字key,一个是需要查找的数组a[]
//int mid = 0;
int low = 0;
int hight = a.length -1;
System.out.print("二分法查询的结果为:");
// while(low <= hight){
// int mid = low + (hight - low)/2;
// if(key < a[mid]){
// hight = mid -1;
// }else if(key > a[mid]){
// low = mid +1;
// }else{
// return a[mid];
// }
// }
//这里可以使用另一种方法实现:
while(low <= hight){
int mid = low + (hight - low)/2;
if(key < a[mid]) hight = mid -1;
if(key > a[mid]) low = mid +1;
if(key == a[mid]) return a[mid];
}
System.out.println("无查询的数字");
return 0;
}
public static void main(String [] args){
int [] a = {1,2,3,4,6,7,8}; //数组是有序的
int key = 6;
System.out.println(rank(key, a));
}
}
阅读全文
1 0
- 查找算法 - 二分法查找
- 查找算法:二分法查找
- C++ 二分法查找算法
- C++二分法查找算法
- 算法:二分法查找
- 算法--二分法查找
- 【基础算法】二分法查找
- 算法-二分法查找数据
- 算法之二分法查找
- 二分法查找算法
- Java 二分法查找算法
- 算法学习--二分法查找
- 二分法查找算法
- [Algorithm]二分法查找算法
- 查找算法--二分法
- 二分法查找的算法
- 二分法快速查找算法
- 算法--二分法查找数字
- 【剑指offer】面试题43:1~n整数中1出现的次数
- Solr集群搭建详细过程
- Java Thread 总结
- Tomcat下面的配置在每次Eclipse编译后,修改好的配置会还原
- C++ STL中sort()排序函数详解
- 二分法查找算法
- ORA-06512: at "SYS.XMLTYPE" 问题记录
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
- mysql更新数据库中所有相同的某个字段的值
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoa
- android中的style部分属性值介绍
- android OkHttp Interceptor模拟返回
- protobuf在iOS中的运用
- Matlab xlim ylim函数