二分法查找算法主要思路: 首先是需要一个有序的数组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))
;
}
}