想必二分查詢很多人都不陌生,或許說很熟悉,但是在實際生活中又有很多人不能正確的寫出它的相應**,因為二分查詢的邊界條件等很難控制,下面我們來仔細的分析一下二分查詢,這只是個人看法,如有異議,歡迎提出。
1、二分查詢可以解決的問題:二分查詢可以解決預排序陣列的查詢問題。只要陣列中包含t(即要查詢的值),那麼通過不斷的縮小包含t的範圍,最終就可以找到它。一開始,範圍覆蓋整個陣列,將陣列的中間項與t進行比較,可以排除一般的元素,範圍縮小一半。就這樣反覆比較反覆縮小範圍,最終就會在陣列中找到t,或者確定原以為t所在的範圍實際為空。對於包含n個元素的表,整個查詢過程大約要經過log(2)n次比較。
注意:二分查詢是針對有序的陣列而言的。
#include
using
namespace
std;
int
binary_search(
intarr,
intn,
intkey)
else
if(arr[mid] < key)
//陣列中間的位置得數小於要查詢的數,那麼我們就在中間數的右區間找
else}
//執行流如果走到此處說明沒有找到要查詢的數字。
return
-1;}測試用例如下所示:
void
test();
intret1 = 0,ret2 = 0,ret3 = 0;
ret1 = binary_search(arr, 5, 9);
cout << ret1 << endl;
ret2 = binary_search(arr, 5, 5);
cout << ret2 << endl;
ret3 = binary_search(arr, 5, 2);
cout << ret3 << endl;
}3、二分查詢**需要注意的地方:
right=n-1-------->while(left <= right)-------->right=mid-1;
right=n-------->while(left < right)-------->right=mid;
此外:大部分人喜歡在最開始就判斷arr[mid]與key相等,但是這樣是不明智的,因為相等情況在大多狀況下都是少數,寫在開始的話,每次迴圈都需要判斷一次相等,浪費時間,效率太低。
二分查詢演算法C 實現
二分法查詢的前提是 陣列是有序的 二分查詢演算法是在有序陣列中用到的較為頻繁的一種演算法,在未接觸二分查詢演算法時,最通用的一種做法是,對陣列進行遍歷,跟每個元素進行比較,其時間為o n 但二分查詢演算法則更優,因為其查詢時間為o lgn 譬如陣列,查詢元素36,用二分查詢的演算法執行的話,其順序為...
c 實現二分查詢 折半查詢 演算法
二分查詢是一種常用的查詢演算法,它不難理解,但是在解決一些問題的時候由於邊界問題的處理不當,經常會出現一些錯誤,比如說死迴圈。首先我們介紹乙個基礎應用,在乙個排序好的線性表中查詢目標。問題描述 給定乙個整數x和整數 解決思路 一種自然而然的想法是從左到右掃瞄,它的執行時間是線性的,但是對於乙個龐大的...
二分查詢演算法實現
include include using namespace std define n 20 int binary chop int a,int n,int j,int k 找到即返回下標 else if a mid k high mid 1 尋找的值小於中間值,則在左邊一般查詢 else low...