1. 程式人生 > >二分法原理理解

二分法原理理解

    int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    Log.e("二分法", "查詢8所在的位置" + search(array,0,array.length-1,8));

/**
* 二分法:(二分法不是隻能做陣列,這裡的陣列只是為了完成demo)
* 在給出的有序排列的陣列中,把目標值和陣列中間值進行比較,如果相等,則返回中間值下標,如果目標值小於中間值,就從數
* 組的前半段再次執行二分法查詢,如果目標值大於中間值,從陣列的後半段開始二分法查詢
* 二分法查詢主要是比較的次數少,查詢的速度快,平均效能好,但是待查表一定要是有序的,
* 插入刪除比較困難,所以二分法查詢不適用於經常變動的有序列表
*
* @param array
* @param start
* @param end
* @param findvalue
* @return
*/
private int search(int[] array, int start, int end, int findvalue) {
if (null == array)
return -1;
if (start <= end) {
//中間位置
int middle = (start + end) / 2;
//中間值
int middleValue = array[middle];
//二分法的原理:
if (findvalue < middleValue) {
//目標值小於中值,在中值前面找(這裡呼叫了二分法的方法)
return search(array, start, middle - 1, findvalue);
} else if (findvalue > middleValue) {
//目標值大於中值,在中值後面找(這裡呼叫了二分法的方法)
return search(array, middle + 1, end, findvalue);
} else {
//與中值相等就直接返回
return middle;
}
}else{
//返回-1,查詢失敗
return -1;
}

}