zoukankan      html  css  js  c++  java
  • 二分查找--python

     1 import random
     2 
     3 # 二分查找--递归实现
     4 def binary_search(arr, left, right, num):
     5     if left > right:
     6         return -1
     7     mid = (left + right) // 2
     8     if arr[mid] < num:
     9         left = mid + 1
    10     elif arr[mid] > num:
    11         right = mid - 1
    12     else:
    13         return mid
    14     return binary_search(arr, left, right, num)
    15 
    16 
    17 # 二分查找非递归实现
    18 def binary_chop(arr, data):
    19     n = len(arr)
    20     first = 0
    21     last = n - 1
    22 
    23     while first <= last:
    24         mid = (last + first) // 2
    25         if arr[mid] > data:
    26             last = mid - 1
    27         elif arr[mid] < data:
    28             first = mid + 1
    29         else:
    30             return mid
    31     return -1
    32 
    33 if __name__ == '__main__':
    34     arr = [11, 32, 51, 21, 42, 9, 5, 6, 7, 8]
    35     print(arr)
    36     arr.sort()
    37     print(arr)
    38 
    39     num = random.randint(0, 52)
    40     print('要查找的数:', num)
    41     res = binary_search(arr, 0, len(arr) - 1, num)
    42     if -1 == res:
    43         print('未找到!')
    44     else:
    45         print('找到了,索引', res)
    46     num = arr[random.randint(0, len(arr))]
    47     print('要查找的数:', num)
    48     res = binary_search(arr, 0, len(arr) - 1, num)
    49     if -1 == res:
    50         print('未找到!')
    51     else:
    52         print('找到了,索引', res)
    53 
    54     print('*********************')
    55     print('二分查找非递归实现')
    56     num = random.randint(0, 52)
    57     print('要查找的数:', num)
    58     res = binary_search(arr, 0, len(arr) - 1, num)
    59     if -1 == res:
    60         print('未找到!')
    61     else:
    62         print('找到了,索引', res)
    63     num = arr[random.randint(0, len(arr))]
    64     print('要查找的数:', num)
    65     res = binary_search(arr, 0, len(arr) - 1, num)
    66     if -1 == res:
    67         print('未找到!')
    68     else:
    69         print('找到了,索引', res)
  • 相关阅读:
    hdoj 1879 继续畅通工程
    hdoj 1233 还是畅通工程
    PAT-1107 Social Clusters (30 分)
    hdoj 1232 畅通工程
    POJ-3061 前缀和+二分搜索 模板题
    常见推荐系统框架
    常见的时间衰减函数
    英语中的五大基本句型
    如何获得excel文件名和工作表名
    记一次atomikos 连接池耗尽错误
  • 原文地址:https://www.cnblogs.com/yixiu868/p/11763450.html
Copyright © 2011-2022 走看看