二分查詢演算法是一種快速的查詢演算法。
當我們再乙個陣列中查詢是否存在某個數時,通常是
直接遍歷
這個陣列直到找到這個數,時間複雜度為o(n)
試想如果資料量很大,上億呢,怎麼辦,這裡我們可以用
一種簡單快速的的查詢演算法--二分查詢演算法也叫做折半
查詢演算法。
二分查詢演算法的演算法思維:
1.首先查詢陣列必須是有序的(假設為公升序)。
2.取查詢陣列中間的數作為基準,如果需要查詢的資料大於基準說明該數存在於
陣列的左邊。反之存在於基準右邊。
3 假設待查詢的數小於基準,那麼將基準換成左子陣列的中間的數,重複步驟2,
直到找到該數。
很顯然對於上億規模的資料查詢,我們可以將待查詢的資料進行排序,然後再用
二分查詢進行查詢。
二分查詢的時間複雜度為o(logn),
logn是什麼意思呢 意思是當我們在1000個元素中查詢某個元素時 只需要10次比較就可以找到該元素
記住二分查詢只能針對有序資料,切記這一點。
二分查詢實現如下:
1 #include 2執行截圖:using
namespace
std;34
bool findbytwo(int *nums,int numssize,int
number)518
else
1924
if(number
2528}29
}303132
return
false;33
}343536
intmain()37;
40int numssize=10;41
int number=8;
42if
(findbytwo(nums,numssize,number))
4346
else
4750
return0;
51 }
當查詢8時:
當查詢20時:
ok,二分查詢就介紹結束了哦
二分查詢 折半查詢 演算法
二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。首先,假設表中元素是按公升序排列,將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成前 後兩個子...
演算法 二分查詢(折半查詢)
二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。使用二分查詢的條件 1.必須採用順序儲存結構。2.必須按關鍵字大小有序排列。通俗一點的說 如果資料是乙個陣列,那麼這個陣列必須是有序的 時間複雜度 o log2n 如圖所示 下面我們來看c語言 include非遞迴實現 v...
演算法 二分查詢(折半查詢)
一.二分查詢基本思想 在有序的序列裡,先將目標和中間的數值比較,如果大於中間數值,則在後半段的中間繼續比對 如果小於中間數值,則在前半段的中間繼續比對。以此類推,直至找到目標,或者結束查詢沒有找到。二.關鍵條件 1 有序序列 2 順序儲存結構 三.時間複雜度 o logn 四.優點和不足 優點是比較...