數組二分法意在以較快的速度查找到某個值的下標位置。java
二分法的核心思想:找到一個數組的中間位置值,判斷某個數值是在這個中間值的左邊仍是右邊,若是是左邊,將中間位置以前進行二分,二分後,結束位置變爲原始中間位置。若是是右邊,將中間位置以後進行二分,二分後,開始位置變爲原始中間位置。數組
廢話很少說,先上代碼。spa
/** * 數組二分法 */ @Test public void test(){ int[] array={1,2,3,4,5,6,7,8,9,10}; int sum=0; String value=binary1(array,9,sum); System.out.println("所要查找數據的位置:"+value);//返回下標位置 }
public String binary1(int[] array,int value,int sum){ int before=0; int after=array.length; while(before<=after){ sum++; int mid=(before+after)/2; if((before+after)%2==0){ mid-=1; } if(value==array[mid]){ return mid+"--"+sum; }else{ if(value>array[mid]){ before=array[mid]; }else{ after=array[mid]; } } } return null; }
/* * 第二種(網上查的) */ public static String binary(int[] array,int value,int sum){ int low=0; int high=array.length-1; while(low<=high){//eg,查詢9這個數的下標,循環了三次 sum++; int middle=(low+high)/2; // System.out.println(middle); if(value==array[middle]){ return middle+"--"+sum; } if(value>array[middle]){ low=middle+1; } if(value<array[middle]){ high=middle-1; } } return null; }