理解:
假設在有序的100個數中找到某乙個數字a,那麼就先找到中間值mid,如果a>mid,那就縮小一半的範圍,將mid設為最小邊界,在mid到100中查詢這個數字,計算新的mid=(min+100)/2,如果這個值還大於mid,那就再縮小一般的範圍,設定最小邊界為mid,繼續查詢,每次查詢都將查詢範圍分割(縮小)一半,所以叫二分查詢法,如圖所示,在100的範圍內查詢15,不斷將中間值與15進行比較來縮小範圍,確定新的邊界:
實現**如下:
static int search(int arr, int value)
else
}return -1;
}
因為在二分查詢中會不斷地分割陣列進行重複操作,直到找到結果為止,這很符合遞迴的思想,因此遞迴二分查詢演算法便誕生了:
static
int recursionsearch(int
value,int arr, int bottom, int top)
else
if(value==arr[mid])
else}}
完整**如下:
class program
;console.writeline("before sort:");
show(arr);
console.writeline("after sort:");
insertionsort(arr);
show(arr);
for (int i = 0; i < arr.length; i++)
else}}
static
void show(int arr)
//插入排序法
static
void insertionsort(int arr)
arr[origin] = temp;}}
static
int recursionsearch(int
value,int arr, int bottom, int top)
else
if(value==arr[mid])
else}}
}
執行結果:
查詢演算法 二分查詢
利用二分查詢演算法查詢某乙個元素,前提條件是該被查詢的元素是乙個已經有序的陣列。二分查詢的思想是將陣列元素的最高位 high 和最低位 low 進行標記,取陣列元素的中間 mid 和和要查詢的值 key 進行比較,如果目標值比中間值要大,則將最低位設定為mid 1,繼續進行查詢。如果目標值小於中間值...
查詢演算法 二分查詢
二分查詢的思路是很簡單的,前提是這組資料是有順序的。思路是從中間找乙個數,判斷大小,如果數比中間數大,說明在中間數到結尾的數中,如果小於,則說明在開始和中間數之間,經過多次相同操作,就可以得到我們想查詢的數時間複雜度就是 o logn 非遞迴的實現 const testarr let i 0whil...
查詢演算法 二分查詢
二分查詢是乙個常用的查詢演算法,其原理在於通過不斷切分乙個規則排序,對半的去尋找目標元素所在的區間與位置。但是其有乙個前提,那就是資料結構需要是順序儲存結構,並且關鍵字大小有序排列。例子如下 例 有乙個數列 12,23,45,56,67,89 請使用二分查詢找到56的位置 解 首先mid 0 5 2...