一、解决方案
    给定数组:A = [1,2,3,4,5,6,7,8,9],找到其中的一个数T

    1. 只适用于排好序的数组
    2. 定义初始左边界L和有边界R
    3. 获取中间索引M=(L+R)/2
    4. 比较:

    1) A[M]>T,说明中间索引在要找的数右边,把右边界R设置为中间索引的下一个M-1;
    2)A[M]3)如果A[M] == T表示找到,返回中间索引。

    1. 如果L>R,表示没找到,结束循环。

    二、代码

    1. public static int BinarySearch(int[] a,int t){
    2. int l = 0;
    3. int r = a.length - 1;
    4. int m;
    5. while(l<=r){
    6. m = (l+r)/2;
    7. if(a[m] == t){
    8. return m;
    9. }
    10. if(a[m]>t){
    11. r = m-1;
    12. }
    13. if(a[m]<t){
    14. l = m + 1;
    15. }
    16. }
    17. return -1;
    18. }

    三、问题

    1. 如果l和r为最大整数,则在计算过程中(l+r)会溢出。
    2. 将m = l + (r-l)/2

    四、面试题

    1. 给定一个排好序的数组,问查找T需要比较几次;
    2. 拥有128个元素的数组中二分查找,比较次数最多不超过?

    2的n次方 = 128,求n (ln128)