python实现顺序查找和折半查找

1 顺序查找

特点:不需要内容有序,一个一个查找

缺点:查找效率低,不适合大数据 ,假设数据的总个数为n,则计算复杂度为n/2

下面的程序由三个函数组成,第一个函数是装饰器,作用是计算函数的

运行时间

    第二个函数的作用是数据的输入,为方便直接给列表装载i

    第三个函数的作用是实现顺序查找


# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""
import time
list_num=[]
#装饰器,计算函数的运行时间
def timer(func):
    def wrapper(*args,**kwargs):#*args,**kwargs作用是不限定形参的个数和形式
        start_time=time.time()#获取函数运行前的系统时间
        func(*args,**kwargs)
        stop_time=time.time()#获取函数运行后的系统时间
        print(start_time)
        print(stop_time)
        print('the func run time is %f'%(stop_time-start_time))
        return 0
    return wrapper
#输入数据
def datain_func(n):
    for i in range(n):
        #data_in=int(input('请输入数据:'))
        list_num.append(i)
    #print('输入数据列表:')
    #print(list_num)
#查找
@timer#等价于 search_func=timer(search_func)
def search_func(s):
    cnt=0
    for i in list_num:
        cnt+=1
        if i==s:
            print('你要找的数在第%d位置'%cnt)
            return i
    print('你要查找的数不再这个文件里')
    
#数据输入
data_num=int(input('请输入要数据的个数:'))
datain_func(data_num)

#数据查找
search=int(input('请输入要查找的数:'))
search_func(search)

2 折半查找

特点:要求数据是有序的如【0,1,2,3,4,5,6,7,8,9】

优点:效率高

缺点:要求数据有序

参考代码的函数功能与上类似直接贴出

# -*- coding: utf-8 -*-
"""
Created on Sat Jul  1 19:08:42 2017

@author: wzqya
"""
import time
#装饰器
def timer(func):
    def wrapper(*args,**kwargs):
        start_time=time.time()
        func(*args,**kwargs)
        stop_time=time.time()
        print(start_time)
        print(stop_time)
        print('程序运行时间为%f'%(stop_time-start_time))
        return 0
    return wrapper
list_num=[]
#数据输入
def data_in_func(n):
    for i in range(n):
        list_num.append(i)
#数据查找
@timer
def search_func(search):
    low=0
    high=num-1
    while low<=high:
        mid=(low+high)//2
        if list_num[mid]==search:
            print('要查找的数的第%d处'%(mid+1))
            return 0
        elif list_num[mid]>search:
            high=mid-1
        else:
            low=mid+1
    else:
        print('未找到。。。。。')

num=int(input('num='))
data_in_func(num)

search=int(input('search='))
search_func(search)
        
结果比对

顺序查找:

请输入要数据的个数:100000000
请输入要查找的数:99999999999
你要查找的数不再这个文件里
1498908344.769997
1498908352.447436
the func run time is 7.677439


折半查找:

num=100000000
search=9999999999
未找到。。。。。
1498908393.8948069
1498908393.8958068
程序运行时间为0.001000
很明显折半查找的效率高多了

你可能感兴趣的:(python入门)