zoukankan      html  css  js  c++  java
  • 常见的查找算法的原理及python实现

    • 顺序查找
    • 二分查找
    • 练习

    一、顺序查找

    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)
    

      

  • 相关阅读:
    存储与服务器的连接方式对比(DAS,NAS,SAN)
    FreeNAS系统总结
    FreeNAS-9.10虚拟机测试安装
    rsync实时同步服务部署
    无限循环与嵌套循环
    几种循环语句
    选择结构if
    java引用数据类型
    java运算符的优先级
    java运算符-逻辑、三元运算符
  • 原文地址:https://www.cnblogs.com/mesunyueru/p/8974006.html
Copyright © 2011-2022 走看看