Java實現二分查找(在1-100裏找到目標值)

前言:
二分查找(也是折半查找),是每次用目標值和一個有序數列的中間值對比。這樣的話每次都可以拋棄一半,隨之範圍也會縮小一半。所以每一次都找中間值對比,範圍也每次都縮小一半。直到對比出結果爲止!

例子:
題目:
使用隨機數產生一個目標值(範圍1-100):在一個有序數列1-100的數組裏找到目標值。
要求:循環次數不能超過10次
實現分解:
1 定義目標值(使用隨機函數生成目標值範圍:1-100)

        Random r=new Random();//產生隨機數
        //目標值
        int randomNum=r.nextInt(100)+1;//產生[1,100]的隨機數

2 定義左邊界索引

 int left=0;//開始位置

3 定義佑邊界索引

 int right=array.length-1;//結束位置

4定義中間索引和循環對比(在循環裏定義中間值索引或者循環外面,都行)
核心代碼:(結合實現分解的2,3步驟)

for (int j = 0; j < 10; j++) {
            int mid=(left+right)/2;//中間位置索引
            //每次用目標值和中間值做對比
            //目標值大於中間值
            if (randonNum>array[mid]){
                //改變其實位置,起始位置等於mid+1,
                也就是從中間位置往右諾一位
                left=mid+1;
            }
            //目標值小於中間語句
            if(randonNum<array[mid]){
                right=mid-1;
            }
            //目標值等於中間語句
            if(randonNum==array[mid]){
                str="恭喜猜中了,目標值爲"+array[mid]
                +"循環次數爲"+j+"次";
                break;//出結果就結束循環
            }
        }

整體代碼實現:
客戶端:

        Random r=new Random();//產生隨機數
        //正確答案
        int randomNum=r.nextInt(100)+1;//產生[1,100]的隨機數
        System.out.println("目標值爲:"+randomNum);
        //獲取對比結果
        String  relust=RandomGame(randomNum);
        System.out.println(relust);//輸出結果

方法:

  //最多用10次猜測出,(1-100範圍內)產生的隨機數。
    public static String RandomGame(int randonNum){
        int[] array=new int[100];
        String str="";
        for (int i = 1; i <= 100; i++) {
            array[i-1]=i;
        }//循環向數組裏存入100個數字
        int left=0;//開始位置
        int right=array.length-1;//結束位置
        for (int j = 0; j < 10; j++) {
            int mid=(left+right)/2;//中間位置索引
            //每次用目標值和中間值做對比
            //目標值大於中間值
            if (randonNum>array[mid]){
                //改變其實位置,起始位置等於mid+1,
                也就是從中間位置往右諾一位
                left=mid+1;
            }
            //目標值小於中間語句
            if(randonNum<array[mid]){
                right=mid-1;
            }
            //目標值等於中間語句
            if(randonNum==array[mid]){
                str="恭喜猜中了,目標值爲"+array[mid]+
                "循環次數爲"+j+"次";
                break;//出結果就結束循環
            }
        }
        return str;
    }

結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章