---用教授的方式学习。
目录
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,