對於已排序的序列,實現二分法搜尋演算法,有迴圈和遞迴兩種策略。
對於這種演算法,中心點一直是乙個開區間,因此下一次搜尋時新區間應該相應的+-1,從而最終start>end
# -*- coding: utf-8 -*-
def binarysearch1(l, item):
start = 0
end = len(l) - 1
while start <= end:
mid = (start + end)/2
if l[mid] < item:
start = mid + 1
elif l[mid] > item:
end = mid -1
else:
return mid
return -1
def binarysearch_recur1(l, item):
start = 0
end = len(l) - 1
def binarysearch_recur_pack(l, item, start, end):
if start <= end:
mid = (start + end)/2
if l[mid] < item:
start = mid + 1
elif l[mid] > item:
end = mid - 1
else:
return mid
result = binarysearch_recur_pack(l, item, start, end)
if result == -1:
return -1
else:
return result
else:
return -1
return binarysearch_recur_pack(l, item, start, end)
l = [1, 6, 8, 9, 14, 36, 77, 90]
print binarysearch1(l, 5)
print binarysearch_recur1(l, 78)
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...
python 二分法查詢(遞迴實現和迴圈實現)
二分法 查詢的場景可以想象做一群小孩上體育課的時候按高矮個排隊,按個子從矮到高順序排好了之後,小孩a姍姍來遲,這時候老師就說,來,報個數,你們班排在中間的同學m舉下手 然後小孩a和小孩m比身高,要是小孩a比m高,那小孩a的位置上肯定要安排在m之後,否則就安排在m之前。就這樣縮小範圍後,在重複上面的操...
遞迴二分法查詢
二分法使用了折半查詢的思想,不斷的變化,陣列下標的起始位置 begin 和終止位置 end 來進行搜尋。我們使用兩種演算法,解決二分查詢 public class solution system.out.println solution.sort number,0,number.length,56 ...