目录
二分法
二分法查找适用于数据量较大时,但是数据需要先排好顺序。主要思想是:(设查找的数组区间为array[low, high])
(1)确定该区间的中间位置K(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]b.array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间将缩小一半,递归查找即可。时间复杂度为:O(log2n)
l = [2,3,10,5,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
找到l中的72
可以实现的办法:
l = [2,3,10,5,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
for i in l:
if i == 72:
print(i)
用否循环可以实现,可是如果数据量特别大的时候,要找的元素在最后一个,这就需要从前向后一个一个的查找
这时我们可以用二分法查找:
l = [2,3,10,5,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
l.sort()
def func(l,aim):
#取中间值的索引
mid = (len(l)-1)//2
if l:
if l[mid] == aim:
print('呀,找到了',aim)
elif l[mid] > aim:
func(l[:mid],aim)
elif l[mid] < aim:
func(l[mid+1:],aim)
else:
print('找不到')
func(l,72)
结果:
呀,找到了 72
堆栈
堆栈是一种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除,堆栈,先进后出FILO—First-In/Last-Out)
利用堆栈的思想实现的问题:
1 计算文件夹的大小
import os
path = input('输入文件夹的绝对路径')
l = [path]
def file_size(path):
size = 0
#列表不为空,则一直循环,列表存u放所有的目录
while l:
path = l.pop() # E:\oldboy20\python脱产班20期
lst = os.listdir(path) #path下的所有文件和文件夹
for name in lst:
#将path下的文件和文件夹做路径的拼接,取绝对路径
path_son = os.path.join(path, name)
if os.path.isfile(path_son):
#是文件则将文件的大小计算出来,并累加
size += os.path.getsize(path_son)
else:
#是目录则加入列表中
l.append(path_son)
return size
size = file_size(path)
print(size)