[java]代码库import java.util.*;
2 /**
3 *
4 * 一个二分查找法
5 * @author nileader
6 */
7 public class BinaryQuery {
8 /**
9 * *折半查找法,又称十分法查找 查找的对象是一个按序排好的数组
10 */
11 public static void main(String[] args) {
12 int[] initVals = { 9,12, 37, 53, 67, 71, 89, 122, 290, 435, 555, 888, 1104, 1111, 2222,3333,21343,43256,56778300 };
13 for(int i = 0; i < initVals.length; i++)
14 {
15 System.out.print(initVals[i] + "、");
16 }
17 Scanner cin = new Scanner(System.in);
18 while(cin.hasNext())
19 {
20 int targetVal = cin.nextInt();
21 BinaryQuery bq = new BinaryQuery();
22 int postion = bq.query(initVals,targetVal);
23 if(postion == -1) System.out.println("没有找到");
24 else System.out.println("要查找的数字在数组中的第 " + (postion + 1) + "个位置");
25 }
26 }
27
28 /*
29 * @param values 要找的数组对象
30 * @param targetVal 要找的目标数字
31 * @return -1 没有找到,返回-1
32 */
33 public int query(int[] initVals, int targetVal) {
34 int lowBound = 0;
35 int upBound = initVals.length - 1;
36
37 //相当于一个指针,指向下一个要比的数字
38 int nowPostion;
39
40 while (true) {
41
42 //指向现在所有数字的中间,没有整除时向下取整,如7/2=3
43 nowPostion = (lowBound + upBound) / 2;
44 //如果现在这个数字就是了,返回现在的编号
45 if (initVals[nowPostion] == targetVal) {
46 return nowPostion;
47 }
48 //如果上界小于下界时,说明已经找完全部了,返回-1表示没有找到
49 else if (lowBound > upBound) {
50 return -1;
51 }
52 //还可以继续找
53 else {
54 //当前指针的数比targetVal要小,那么要往小的方向继续找
55 if (initVals[nowPostion] < targetVal) {
56 lowBound = nowPostion + 1;
57 }
58 //当前指针的数比targetVal要大,那么要往大的方向继续找
59 else {
60 upBound = nowPostion - 1;
61 }
62 }
63 }
64
65 }
66 } //源代码片段来自云代码http://yuncode.net