二分查詢演算法

2021-08-01 03:39:07 字數 1273 閱讀 5483

理解:

假設在有序的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...