二分查詢法

2021-08-22 04:54:55 字數 1393 閱讀 5820

二分查詢法(binary search),又稱為「折半查詢法」,它是一種效率較高的查詢方法。但是,折半查詢法要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排序

使用此查詢法前提:

1. 查詢的儲存結構必須為順序儲存結構,即按順序依次儲存元素的結構

2. 該線性表中的元素必須為「已排序」。

二分查詢法的時間複雜度:

1. 二分查詢法的基本思想就是不斷比較表最中間的值,然後將表的範圍分半去搜尋,所以時間複雜度就是while迴圈的次數!!

2. 總共為n個元素,漸漸跟下去就是n, n/2, n/4,....n/(2的k次方), 其中k是迴圈的次數。由於n/(2的k次方)取整後要》=1,即搜尋到最後的字表最多為1個元素,所以,

令n/(2的k次方) = 1,可得"k = log2n",所以時間複雜度可以表示為o(log2n)。

3. 根據1、2可得,二分查詢法時間複雜度最快為o(1), 最慢為o(log2n)。

查詢過程(假設表中的元素是按公升序排列的):

1. 首先選取表中間的元素a[n/2]與需要查詢的值x進行比較,如果量值相等,表明已找到,退出搜尋

2. 若沒有找到,將表按照n/2的前半部和後半部分為兩個子表a1、a2,同時比較x是大於a[n/2]還是小於a[n/2]

3. 若x小於a[n/2],則表a1作為下一輪排序表;若x大於a[n/2],則表a2作為下一輪排序表

4. 重複1、2、3,直到找到元素或者字表不存在為止。

**如下:

/* desc: 折半查詢法(binary search)

param: array 查詢的線性表

param: searchvalue 需要查詢的值

param:size 線性表array的長度

return: 返回值為查詢到的元素在陣列中的下標,如果沒有沒有找到,返回-1

*/ template

int binarysearch(t array, t searchvalue, int size)

int high = size - 1; //查詢的終止位置

int low = 0; //查詢的起始位置

int middle = low + (high - low) / 2; //查詢的子表中的中間值的位置

while ((high - low) >= 0)

//若不為子表中的中間值,則判斷為哪一字表

if (searchvalue < array[middle])

else

}return -1;

執行結果:

二分查詢法

二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。優缺點 折半查詢法的優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。演算法思想 首先,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者...

二分查詢法

有序陣列中的find 方法 public int find long serchkey int lowerbound 0 int upperbound nelems 1 while true curin lowerbound upperbound 2 if a curin serchkey retu...

二分查詢法

演算法基本思想 二分查詢演算法的前置條件是,乙個已經排序好的序列 假設這個序列是公升序排列的 這樣在查詢所要查詢的元素時,首先與序列中間的元素進行比較,如果大於這個元素,就在當前序列的後半部分繼續查詢,如果小於這個元素,就在當前序列的前半部分繼續查詢,直到找到相同的元素,或者所查詢的序列範圍為空為止...