講解!java int型別陣列的二分查詢演算法
阿新 • • 發佈:2020-12-09
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);
執行結果: