package com.lym.binarySearch; import java.util.Arrays; /** * 二分查找 * * @author Administrator * */ public class BinarySearchDemo { public static void main(String[] args) { int[] number = { 4, 2, 66, 12, 88, 95, 63, 1 }; Arrays.sort(number);// 先对数组排序,然后再进行二分查找 int index = binarySearch(number, 63);//parameter(int[],key) System.out.println(index); } //二分查找 public static int binarySearch(int[] a, int n) { rangeCheck(a.length,0,a.length-1); return binarySearch0(a, 0, a.length, n); } //异常检测 private static void rangeCheck(int length, int fromIndex, int toIndex) { if (fromIndex > toIndex) { throw new IllegalArgumentException( "fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")"); } if (fromIndex < 0) { throw new ArrayIndexOutOfBoundsException(fromIndex); } if (toIndex > length) { throw new ArrayIndexOutOfBoundsException(toIndex); } } //二分查找核心算法 private static int binarySearch0(int[] a, int fromIndex, int toIndex, int n) { int low = fromIndex; int high = toIndex - 1; while (low <= high) { int mid = (low + high) >>> 1;// middle index 采用移位运算符可以提高性能 int midVal = a[mid];// middle value if (midVal > n) high = mid - 1; else if (midVal < n) low = mid + 1; else return mid;//key found } return -(low + 1);// key no found } }