Python 学习 第三册 第10章 一些简单的算法

---用教授的方式学习。

目录

10.1 搜索算法

10.1.1 线性搜索与间接引用元素

10.1.2 二分查找和利用假设

10.2 排序算法

10.2.1 归并排序

10.2.2 将函数用作参数

10.3 散列表


10.1 搜索算法

本节会研究两种搜索列表的算法,每种方法都满足以下规范:

def search(L, e):
    """假设L是列表
    如果e是L中的元素,则返回True,否则返回False"""

10.1.1 线性搜索与间接引用元素

Python使用以下算法确定列表中是否有某个元素:

for i in range(len(L)): 
    if L[i] == e: 
       return True 
return False

10.1.2 二分查找和利用假设

有序列表的线性搜索

def search(L, e): 
    """假设L是列表,其中元素按升序排列。
        ascending order. 
    如果e是L中的元素,则返回True,否则返回False""" 
   for i in range(len(L)): 
      if L[i] == e: 
         return True 
      if L[i] > e: 
         return False 
    return False

这种算法可以缩短平均运行时间,但不会改变最差情形下的算法复杂度,因为在最差情形下还是需要检查L中的每个元素。

二分查找的思路非常简单:

(1) 选择一个可以将列表L大致一分为二的索引i;

(2) 检查是否有L[i] == e;

(3) 如果不是,检查L[i]大于还是小于e;

(4) 根据上一步的结果,确定在L的左半部分还是右半部分搜索e。

给定算法结构之后,很显然,实现二分查找的最简单直接的方式就是使用递归,如下所示。

递归二分查找

def search(L, e): 
    """假设L是列表,其中元素按升序排列。
       ascending order. 
    如果e是L中的元素,则返回True,否则返回False""" 
    def bSearch(L, e, low, 
  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_38135241

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值