java中的數組二分法

數組二分法意在以較快的速度查找到某個值的下標位置。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;
	}
相關文章
相關標籤/搜索