1. 程式人生 > 實用技巧 >講解!java int型別陣列的二分查詢演算法

講解!java int型別陣列的二分查詢演算法

java int型別陣列的二分查詢演算法

這裡我介紹兩種實現方式:while迴圈實現和遞迴實現

1.while迴圈實現:

/*迴圈實現*/
    private static void demo(int[] arr,int key){
        int max=arr.length-1,min=0,mid;
		//比較最大下標和最小下標範圍是否正常
        while (max>=min){
        	//區中間下標
            mid=(min+max)/2;
            if(arr[mid]<key){//判斷查詢的值和陣列中間值大小
            	//查詢的值大於中間值時 最小下標變為mid+1
                min=mid+1;
            }else if(arr[mid]>key){
            	//查詢的值小於中間值時  最大下標變為mid-1
                max=mid-1;
            }else{
	            //陣列中有值和key一樣
                System.out.println("下標為:"+mid);
                break;
            }
        }
    }

呼叫方法

	int[] arr={1,3,5,7,9};
     demo(arr,9);

執行結果:

2.遞迴方法實現:

/*遞迴實現*/
    private static void demo1(int[] arr,int key,int min,int max) {
        int mid=(max+min)/2;
        if(key==arr[mid]){ //查詢的值等於中間值得時候
            System.out.println("找到了,下標為:"+mid);
            return;
        }else if(key>arr[mid]){ //查詢的值大於中間值
            min=mid+1;
        }else{//查詢的值小於中間值
            max=mid-1;
        }
        if(max>=min){ //正常範圍
            demo1(arr,key,min,max);
        }else{
            System.out.println("沒找到!");
        }
    }

呼叫方法:

		int[] arr={1,3,5,7,9};
        demo1(arr,7,0,arr.length-1);

執行結果: