Java 作业题3

二分查找 主要是其中的细节 这些位置的判断 不去自己调试真的不知道。。。到了考场上如果要手写,连bug也不知道

我也不知道程序设计要笔试是什么意思

本身就是很傻的行为

考作业题 考背诵么?

package Test;


public class Main {
    public static void main(String[] args) {
        int[] a={1, 3, 3, 3, 3, 6, 6, 8, 8, 8, 10};
        System.out.println(binarySearch(a, 3, 1));
    }
    
    /**
     * @param a 待查数组
     * @param key 待查关键字
     * @param flag    如果flag等于0,表示查找关键字出现的第一个位置;如果flag等于1,返回关键字出现的最后一个位置
     * @return 关键字的位置
     */
    private static int binarySearch(int[] a, int key, int flag)
    {
        int len = a.length;
        if(key < a[0] || key > a[len - 1])
            return -1;
        
        int i = 0, j = len - 1;
        while(i <= j) 
        {
            int mid = (i + j) / 2;
            if(key == a[mid]) 
            {
                //接下来的三行代码是为了查找关键字出现的最早的位置
                int tmp = mid;
                while(--tmp >= 0 && a[tmp] == key);//防止越界
                    i = tmp + 1;    //应该新定义一个变量表示,用i存储也行。
                
                //接下来的两行代码是为了查找关键字出现的最后的位置
                while(++mid < len && a[mid] == key);
                    j = mid - 1;
                
                //返回找到的关键字
                if(flag == 0) 
                    return i;
                else 
                    return j;
            }
            else if(key > a[mid])
            {
                i = mid + 1;
            }
            else 
            {
                j = mid - 1;
            }
        }
        return -1;
    }
    
}
原文地址:https://www.cnblogs.com/ranzhong/p/14142876.html