1.首先確定整個查詢區間的中間位置 mid = start+(end-start)/2。
2使用待查關鍵字key值與中間位置的關鍵字值進行比較。
3 若相等,則查詢成功
若大於,則在後(右)半個區域繼續進行折半查詢
若小於,則在前(左)半個區域繼續進行折半查詢
4 對確定的縮小區域再按折半公式,重複上述步驟。
int
bin_search1
(int key,
int arr,
int length)
else
if(arr[mid]
else
}return-1
;}
int
binary_search2
(int key,
int arr,
int start,
int endend)
if(start>=endend)
else
if(key>arr[mid]
)else
if(key
)return-1
;}
int
main()
;int arr_length =
sizeof
(arr)
/sizeof
(arr[0]
);cout<
int resultpos =
bin_search1(18
,arr,arr_length)
;int respos =
binary_search2(12
,arr,
0,arr_length)
; cout<<
"18的位置"
<
cout<<
"12的位置"
牛客題目(答案暫時麼有整理)
二分查詢 遞迴和非遞迴
二分查詢要求 資料儲存在順序儲存結構中 數字有序排放 原理 將陣列分為三部分,依次是左值,中值,右值 將要查詢的值和陣列的中值進行比較,若小於中值則在中值前 面找,若大於中值則在中值後面找,等於中值時直接返回。然後依次是乙個遞迴過程,將前半部分或者後半部分繼續分解為三部分。迴圈實現二分查詢 temp...
二分查詢(遞迴 非遞迴)
二分查詢是一種查詢效率非常高的查詢演算法。又稱折半查詢。起初在資料結構中學習遞迴時實現二分查詢,實際上不用遞迴也可以實現,畢竟遞迴是需要開闢額外的空間的來輔助查詢。本文就介紹兩種方法 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。使用條件 查詢序...
遞迴和非遞迴的二分查詢
思路很簡單,注釋已標註 include 遞迴二分查詢 int binarysearch int start,int end,intfinddata int mid start end start 2 根據中間值不斷二分縮小待查元素所在範圍 if finddata mid else if findda...