python学习之-二分法

二分法(算法中最简单的一种算法)

例:通过递归和二分法来查找值在不在列表中
nums=[11,13,21,31,43,101,221,302,339,443]

def binary_search(find_num,l):
  if len(l) == 0:
    print('not exists')
    return
  mid_index=len(l) // 2
  if find_num > l[mid_index]:
    binary_search(find_num,l[mid_index+1:])
  elif find_num < l[mid_index]:
    binary_search(find_num,l[:mid_index])
  else:
    print('find it')

binary_search(310,nums)

PS:二分法的逻辑,上来把一个列表的长度用整数除法进行整除,然后将传入的数字与整除后的数进行对比,如果小了查找的数肯定在右边(这时候利用列表切片再通过递归法传返回函数本身,往右切片的时候可以+1然后到最后,这样可以减少递归次数,当然也可以使加2,不限制,但是需要根据实际情况进行加数),如果大了肯定在左边

猜你喜欢

转载自www.cnblogs.com/shizhengquan/p/10017015.html