二分查找

2018-08-02  本文已影响0人  小碧小琳

查找题目的套路:

一、二分搜索

二分搜索的是有序表,时间复杂度是O(log(n))。需要一个辅助变量found来表示是否已经找到target。
思路:
1、左指针为left,右指针为right,中间指针为len(list)//2。

2、有序,选择中间元素item,与target进行比较,相应的有三种情况

代码:

循环条件:左指针小于等于右指针,且没有发现target

1   def binarySearch(alist, target):
        #定义左指针跟右指针的索引
2       first = 0
3       last = len(alist)-1
        #把found设置为Flase
4       found = False
5   
6       while first<=last and not found:
7           midpoint = (first + last)//2
8           if alist[midpoint] == target:
9               found = True
10          else:
11              if target < alist[midpoint]:
12                  last = midpoint-1#target在左半部分
13              else:
14                  first = midpoint+1
16      return found

递归版本:用列表切片来限制搜索范围

1   def binarySearch(alist, target):
2       if len(alist) == 0:
3           return False
4       else:
5           midpoint = len(alist)//2
6           if alist[midpoint]==target:
7             return True
8           else:
9             if target<alist[midpoint]:
10              return binarySearch(alist[:midpoint],target)
11            else:
12              return binarySearch(alist[midpoint+1:],target)
13  
14  testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
15  print(binarySearch(testlist, 3))
16  print(binarySearch(testlist, 13))
上一篇下一篇

猜你喜欢

热点阅读