使用迴圈和遞迴方法實現二分法搜尋
阿新 • • 發佈:2019-01-27
對於已排序的序列,實現二分法搜尋演算法,有迴圈和遞迴兩種策略。
對於這種演算法,中心點一直是一個開區間,因此下一次搜尋時新區間應該相應的+-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)