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
  • 相关阅读:
    ubuntu9.10在AMD 双核上的安装
    修改wamp默认安装下MySQL的root账户密码
    IE6 IE7 IE8 火狐浏览器兼容问题
    在windows xp下安装ubuntu9.10
    制作Ubuntu U 盘启动盘在ubuntu12.04中
    使用StackTraceElement封装,打印调试代码!
    String字符串拼接原理剖析
    List中的数据如何根据对象的某一个或多个字段排序引出Comparable和comparator的使用
    String类的split方法
    通过例子看六种异常处理的陋习
  • 原文地址:https://www.cnblogs.com/xingye-mdd/p/8977651.html
Copyright © 2011-2022 走看看