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