1 package search;
2
3 /**
4 * 二分查找又称折半查找,它是一种效率较高的查找方法。
5 【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
6 * @author Administrator
7 *
8 */
9 public class BinarySearch {
10 public static void main(String[] args) {
11 int[] src = new int[] {1, 3, 5, 7, 8, 9};
12 System.out.println(binarySearch(src, 7));
13 System.out.println(binarySearch(src,3,0,src.length-1));
14 }
15
16 /**
17 * * 二分查找算法 * *
18 *
19 * @param srcArray
20 * 有序数组 *
21 * @param des
22 * 查找元素 *
23 * @return des的数组下标,没找到返回-1
24 */
25 public static int binarySearch(int[] srcArray, int des){
26
27 int low = 0;
28 int high = srcArray.length-1;
29 while(low <= high) {
30 int middle = (low + high)/2;
31 if(des == srcArray[middle]) {
32 return middle;
33 }else if(des <srcArray[middle]) {
34 high = middle - 1;
35 }else {
36 low = middle + 1;
37 }
38 }
39 return -1;
40 }
41
42 /**
43 *二分查找特定整数在整型数组中的位置(递归)
44 *@paramdataset
45 *@paramdata
46 *@parambeginIndex
47 *@paramendIndex
48 *@returnindex
49 */
50 public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){
51 int midIndex = (beginIndex+endIndex)/2;
52 if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
53 return -1;
54 }
55 if(data <dataset[midIndex]){
56 return binarySearch(dataset,data,beginIndex,midIndex-1);
57 }else if(data>dataset[midIndex]){
58 return binarySearch(dataset,data,midIndex+1,endIndex);
59 }else {
60 return midIndex;
61 }
62 }
63
64 }