1. 程式人生 > >使用迴圈和遞迴方法實現二分法搜尋

使用迴圈和遞迴方法實現二分法搜尋

對於已排序的序列,實現二分法搜尋演算法,有迴圈和遞迴兩種策略。

對於這種演算法,中心點一直是一個開區間,因此下一次搜尋時新區間應該相應的+-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)