您的位置:首页 > 编程语言 > Python开发

python学习13-搜索和排序

2016-07-08 11:19 381 查看
一、主要的搜索方法

1.线性搜索

#哨兵搜索
#主要思路是在列表结尾加上一个v,然后搜索到v之后表示结束。搜索结束之后再将v删除,当作没发生一样
def linear_search2(v,L):
L.append(v)           #在列表尾部加上一个v
i=0
while L[i]!=v:
i+=1
L.pop()              #删除列表尾部加入的那个v

return i
S=[1,3,1,5,7,9,5,4,2]
linear_search1(4,S)

#哨兵搜索
#主要思路是在列表结尾加上一个v,然后搜索到v之后表示结束。搜索结束之后再将v删除,当作没发生一样
def linear_search2(v,L):
L.append(v)           #在列表尾部加上一个v
i=0
while L[i]!=v:
i+=1
L.pop()              #删除列表尾部加入的那个v

return i
S=[1,3,1,5,7,9,5,4,2]
linear_search2(4,S)


线性搜索运行的时间:

import time    #导入时间模块

def time(v,L)
t1=time.time()
linear_search(v,L)
t2=time.time()
return (t2-t1)*1000      #返回的是秒


总结:基本线性搜索比list.index()多花了近7倍的时间,而其他两种算法比list.index()慢了4倍。而且随着搜索列表数据的增多,所花费的时间也是呈线性增长的。

二、二分搜索

#二分搜索,就是将列表不断2分,左边的总是偏小,右边的总是偏大。N个值可以在log2  N步以内搜索完毕。大前提是这个列表必须排好序
def binary_search(v,L):            #找到需要搜索的数值v并且返回其在列表中的索引
i=0
j=len(L)-1
while i!=j+1:
m=(i+j)/2
if L[m]<v:
i=m+1
else:
j=m-1

if 0<=i<len(L) and L[i]==v:
return i
else:
return -1
l=[2,3,4,5,6,7,8,9]
binary_search(4,l)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 搜索