数据结构与算法(python版)之查找
- 一、顺序查找
- 1.什么叫顺序查找
- 2.顺序查找过程
- 3.无序表的顺序查找代码
- 4.无序表的顺序查找算法分析
- 5.有序表的顺序查找算法分析
- 6.有序表的顺序查找程序
- 二、二分查找
- 1.分析
- 2.二分查找实现程序
- 3.二分查找的递归实现
- 4.二分查找的算法分析
- 三、小结
一、顺序查找
1.什么叫顺序查找
如果数据项保存在如列表这样的集合中,我们会称这些数据项具有线性或者顺序关系。
在python list中,这些数据项的存储位置称为下标(index),这些下标都是有序的整数。
通过下标,我们可以按照顺序来访问和查找数据项,这种技术称为“顺序查找”。
2.顺序查找过程
先从列表的第一个数据项开始,按照下标增长的顺序,逐个比对数据项,如果到最后一个都未发现要查找的项,那么查找失败。
3.无序表的顺序查找代码
def sequentialSearch(alist,item):
found=False
pos=0
while pos<len(alist) and not found:
if alist[pos]==item:
found=True
else:
pos=pos+1
return found
print(sequentialSearch([1,2,3,4,5],5))
4.无序表的顺序查找算法分析
5.有序表的顺序查找算法分析
6.有序表的顺序查找程序
def orderedSequentialSearch(alist,item):
found=False
pos=0
stop =False
while pos<len(alist) and not found and not stop:
if alist[pos]==item:
found=True
else:
if alist[pos]>item:
stop=True
else:
pos=pos+1
return found
print(orderedSequentialSearch([1,5,8],5))
二、二分查找
1.分析
2.二分查找实现程序
def binarySearch(alist,item):
first=0
last=len(alist)-1
found=False
while first<=last and not found:
#整除2
midPoint=(first+last)//2
if alist[midPoint]==item:
found=True
else:
if item<alist[midPoint]:
last=midPoint-1
else:
first=midPoint+1
return found
print(binarySearch([0,1,2,8,13,17,19,32,42],3))
print(binarySearch([0,1,2,8,13,17,19,32,42],13))
3.二分查找的递归实现
def binarySearchRecursive(alist,item):
#递归结束条件可以是:
#if len(alist)==1:
# return item==alist[0]
if len(alist)==0:
return False
else:
midPoint=len(alist)//2
if item==alist[midPoint]:
return True
else:
if item<alist[midPoint]:
return binarySearchRecursive(alist[:midPoint],item)
else:
return binarySearchRecursive(alist[midPoint+1:],item)
print(binarySearchRecursive([0,1,2,8,13,17,19,32,42],3))
4.二分查找的算法分析
三、小结