二分法查找

来源:互联网 发布:网络兼职刷信誉骗局 编辑:程序博客网 时间:2024/04/29 09:38
 1 package method.search;
 2 
 3 import java.io.*;
 4 import method.sort.*;
 5 
 6 public class BinarySearch 
 7 {
 8         
 9         
10         //二分法查询方法
11         public static boolean binarySearch(int[] array, int value)
12         {
13                 //得到数组的最地位的值
14                 int low = 0;
15                 //得到数组的最高位的值
16                 int high = array.length - 1;
17                 //得到当前和所需要查询的值比较的数组里面的值
18                 int middle = 0;
19                 
20                 while(low <= high)
21                 {
22                         middle = (low + high) / 2;
23                         for(int k = 0; k < array.length; k++)
24                         {
25                                 System.out.print(array[k]);
26                                 //此if语句会打印这个方法的查询过程,#表示每次要比较的数
27                                 if(k == middle)
28                                 {
29                                         System.out.print("#");
30                                 }
31                                 System.out.print(" ");
32                         }
33                         System.out.println();
34                         
35                         //如果成立,说明已经找到所需要查询的值
36                         if(value == array[middle])
37                         {
38                                 return true;
39                         }
40                         
41                         //如果所需要找的值比中间值大,则需要把最低位的值移动到中间值加1的位置
42                         if(value > array[middle])
43                         {
44                                 low = middle + 1;
45                         }
46                         
47                         //如果所需要找的值比中间值小,则需要把最高位的值移动到中间值减1的位置
48                         if(value < array[middle])
49                         {
50                                 high = middle - 1;
51                         }
52                 }
53                 
54                 return false;
55         }
56         
57         public static void main(String[] args)
58         {
59                 int[] array = new int[]{235435781288992 , 44};
60                 String s = "";
61                 
62                 //输入所需要查找的数字
63                 try
64                 {
65                         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
66                         s = in.readLine();
67                 }
68                 catch(IOException e){}
69                 
70                 int input = Integer.parseInt(s);
71                 BubbleSort.bubbleSort(array);
72                 
73                 for(int i = 0; i < array.length; i++)
74                 {
75                          System.out.print(array[i] + " ");
76                 }
77                 
78                 System.out.println();
79                 boolean f = binarySearch(array, input);
80                 
81                 //判断所需要找的值是否属于此数组
82                 if(f)
83                 {
84                         System.out.println(input + "属于" + "此数组");
85                 }
86                 else
87                 {
88                         System.out.println(input + "不属于" + "此数组");
89                 }
90                 
91         }
92 }