1.1.10 二分查找(BinarySearch)

83 阅读1分钟

数据集

  1. tinyAllowlist.txt
  2. tinyText.txt
  3. largeAllowlist.txt
  4. largeText.txt

代码实现
BinarySearch.py

def BinarySearch(key: int, a: [int]):
    """
    二分查找
    :param key: 需要查找的值
    :param a: 有序列表
    :return: 目标值索引,不存在则返回-1
    """
    left = 0
    right = len(a) - 1
    while left <= right:
        # 被查找的键要么不存在,要么必然存在于 a[left..right] 之中
        mid = left + (right - left) // 2  # //是整除
        if key < a[mid]:
            right = mid - 1
        elif key > a[mid]:
            left = mid + 1
        else:
            return mid
    return -1


def main():
    filename = "largeText.txt"
    whitelist = list(map(int, open("tinyAllowlist.txt").readlines()))
    whitelist.sort()  # 对数组进行排序
    for key in list(map(int, open("largeAllowlist.txt").readlines())):
        if BinarySearch(key=key, a=whitelist) < 0:
            # 读取键值,如果不存在于白名单中则将其打印
            print(key)


if __name__ == '__main__':
    main()