zoukankan      html  css  js  c++  java
  • Python笔记4(二分查找)

    1、算法:计算一些比较复杂的问题,所采用的 在空间(内存)上 或 时间上(执行时间) 更有优势的方法。

    2、常用的算法:

    排序(快速排序、冒泡排序、堆排序)

    查找

    3、二分查找:想从一个按照从小到大排列的数字列表中找到指定的数字,遍历的效率太低,用二分法(算法的一种,算法是解决问题的方法)可以极大低缩小问题规模。

    备注:解决有序的数字集合的查找问题

     1 #练习1
     2 l=[1,2,10,30,33,99,101,200,301,402] #从小到大排列的数字列表
     3 
     4 def search(num,l):
     5     print(l)
     6     if len(l) > 0:
     7         mid=len(l)//2
     8         if num > l[mid]:
     9             #in the right
    10             l=l[mid+1:]
    11         elif num < l[mid]:
    12             #in the left
    13             l=l[:mid]
    14         else:
    15             print('find it')
    16             return
    17         search(num,l)
    18     else:
    19         #如果值不存在,则列表切为空
    20         print('not exists')
    21         return
    22 search(100,l)
    23 #输出结果
    24 # >>>[1, 2, 10, 30, 33, 99, 101, 200, 301, 402]
    25 # >>>[101, 200, 301, 402]
    26 # >>>[101, 200]
    27 # >>>[101]
    28 # >>>[]
    29 # not exists
    30 
    31 
    32 #练习2
    33 l=[1,2,10,30,33,99,101,200,301,402]
    34 
    35 def search(num,l,start=0,stop=None):
        #if stop is None else stop
    stop = len(l)-1 if stop is None else stop
    36 if start <= stop: 37 mid=start+(stop-start)//2 38 print('start:[%s] stop:[%s] mid:[%s] mid_val:[%s]' %(start,stop,mid,l[mid])) 39 if num > l[mid]: 40 start=mid+1 41 elif num < l[mid]: 42 stop=mid-1 43 else: 44 print('find it',mid) 45 return mid 46 search(num,l,start,stop) 47 else: #如果stop > start则意味着列表实际上已经全部切完,即切为空 48 print('not exists') 49 return None 50 51 search(301,l) 52 #输出结果 53 # >>>start:[0] stop:[9] mid:[4] mid_val:[33] 54 # >>>start:[5] stop:[9] mid:[7] mid_val:[200] 55 # >>>start:[8] stop:[9] mid:[8] mid_val:[301] 56 # >>>find it 8
  • 相关阅读:
    input上传限定文件类型
    扫描二维码自动识别手机系统(Android/IOS)
    css/html/Javascript
    移动端容易碰到的点击穿透的坑
    洛谷P3387 【模板】缩点
    洛谷P1137 旅行计划
    洛谷P2324 [SCOI2005]骑士精神
    洛谷P2571 [SCOI2010]传送带
    BZOJ4300: 绝世好题
    [洛谷P1966] 火柴排队
  • 原文地址:https://www.cnblogs.com/xingye-mdd/p/8977651.html
Copyright © 2011-2022 走看看