python学习13-搜索和排序

来源:互联网 发布:axentwear淘宝 编辑:程序博客网 时间:2024/06/05 08:21

一、主要的搜索方法
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 iS=[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 iS=[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 -1l=[2,3,4,5,6,7,8,9]binary_search(4,l)
0 0
原创粉丝点击