Fork me on GitHub

随笔 - 672  文章 - 5  评论 - 138  0

  二分查找算法也成为折半算法,对数搜索算法,一会中在有序数组中查找特定一个元素的搜索算法。搜索过程是从数组中间元素开始的

如果中间元素正好是要查找的元素,则搜索过程结束;如果查找的数大于中间数,则在数组的前一半查找,否则,在后一半查找。直到找到相应

数据止。

  该算法的的复杂度为 O(log n),相比其他算法优势还是比较明显的。

  二分查找法的O(log n)让它成为十分高效的算法。不过它的缺陷却也是那么明显的。就在它的限定之上:

有序,我们很难保证我们的数组都是有序的。当然可以在构建数组的时候进行排序,可是又落到了第二个瓶颈上:它必须是数组

数组读取效率是O(1),可是它的插入和删除某个元素的效率却是O(n)。因而导致构建有序数组变成低效的事情。

  python的代码实现和测试:

def binary_search(a_list,item):
        first = 0
        last = len(a_list) - 1
        found = False

        while first <= last and not found:
                midpoint = (first + last) // 2
                if a_list[midpoint] == item:
                        found = True
                else:
                        if item < a_list[midpoint]:
                                last = midpoint - 1
                        else:
                                first = midpoint + 1

        return found

test_list = [0,1,2,8,13,17,19,32,42,]
print(binary_search(test_list,3))
print(binary_search(test_list,13))
def dbinary_search(a_list, item):
        if len(a_list) == 0:
                return False
        else:
                midpoint = len(a_list) // 2

        if a_list[midpoint] == item:
                return True
        else:
                if item < a_list[midpoint]:
                        return binary_search(a_list[:midpoint], item)
                else:
                        binary_search(a_list[midpoint + 1:], item)


print(dbinary_search(test_list,3))
print(dbinary_search(test_list,13))

 

posted on 2017-12-29 14:24  虚生  阅读(252)  评论(0编辑  收藏