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