常見的查找算法的原理及python實現
阿新 • • 發佈:2018-04-30
put arch img 字典 python實現 需要 技術 () one
- 順序查找
- 二分查找
- 練習
一、順序查找
data=[1,3,4,5,6] value=1 def linear_search(data,value): flag=False for i in range(0,len(data)): if data[i]==value: # return i flag=True print(‘找到了,在第%s個位置‘%i) if not flag: print(‘查找失敗‘) # linear_search(data,value)
二、二分查找
遞歸:(效率不高)
遞歸需要有結束條件(len(data)<=1),每一次遞歸的問題規模都減小
改變的是每次傳入的data
#遞歸實現 def bin_search2(data,value): mid=len(data)/2 if len(data)>1: if value>data[mid]: bin_search2(data[mid+1:],value) elif value<data[mid]: bin_search2(data[0:mid-1],value) else: return mid else: if data[0]==value: return 0 else: print(‘查找失敗‘)
非遞歸:
改變的是low和high指針的指向
def bin_search(data,value): flag=False low=0 high=len(data)-1 while low<=high: mid=(low+high)//2 if value>data[mid]: low=mid+1 elif value<data[mid]: high=mid-1 else: flag=True return mid if not flag: print(‘查找失敗‘) print(bin_search(data,value))
三、練習
#練習 info=[ {"id":1001, "name":"張三", "age":20}, {"id":1002, "name":"李四", "age":25}, {"id":1004, "name":"王五", "age":23}, {"id":1007, "name":"趙六", "age":33} ] def bin_search(data,value): low=0 high=len(data)-1 while low<=high: mid=(low+high)//2 if data[mid][‘id‘]==value:#取字典的value 用dic[key] return (mid,data[mid]) elif data[mid][‘id‘]<value: low=mid+1 else: high=mid-1 else: return (0,None)#根據返回值判斷是否查到這個人 while True: id=int(input(‘請輸入需要查找的學號(退出請按Q):‘).strip()) # print(type(id)) if id==‘q‘: break else: num,info=bin_search(info,id) if info==‘None‘: print(‘查無此人‘) else: print(‘info:%s‘%info)
常見的查找算法的原理及python實現