python数据结构学习笔记-查找

1.二分查找:

对排序之后的序列进行查找,且操作对象支持下标索引(列表可以,链表不可以)

我写的:二分查找实现(递归实现)

def binary_search(alist, target, start, end):
    if end - start >= 0:
        mid = (end+start)//2  # 算出二分位置
        if alist[mid] == target:  # 如果找到,返回位置
            return mid
        elif alist[mid] < target:  # 如果二分位置小于目标,说明目标在二分位置右边
            return binary_search(alist, target, mid + 1, end)
        elif alist[mid] > target:  # 如果二分位置大于目标,说明目标在二分位置左边
            return binary_search(alist, target, start, mid - 1)
    else:
        return -1


if __name__ == "__main__":
    alist = [17, 20, 26, 31, 44, 54, 55, 77, 93]
    print(alist)
    n = len(alist)
    print(binary_search(alist, 55, 0, n-1))

二分查找实现(非递归实现,只是判断有无):

def binary_search_2(alist, item):
    """二分查找,非递归"""
    n = len(alist)
    first = 0
    last = n-1
    while last >= first:
        mid = (first + last) // 2
        if alist[mid] == item:
            return True
        elif item < alist[mid]:
            last = mid - 1
        else:
            first = mid + 1
    return False

时间复杂度:

最优:O\left ( 1\right )

最坏:O\left ( \log _{2}n \right )

 

 

 

你可能感兴趣的:(数据结构与算法,python)