zoukankan      html  css  js  c++  java
  • 二分法

    二分法 

    返回首页

      二分法:每次拿全部数据对半切,进行比较查找。

      二分法结合递归,进行查找操作

    data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]
    def search(num,data):
        print(data) #每次data都不同,
        if len(data) > 1:
            #二分
            mid_index=int(len(data)/2)  #拿到数据列表除2取中间值
            mid_value=data[mid_index]   #拿中间的索引值对应的数据
            if num > mid_value: #19>18   #判断数据和输入的数据的大小,小则在数据列表的右边,大则在数据列表的左边
                #num在列表的右边
                data=data[mid_index:] #data[0:]-->[18:] 数据列表切片操作,从mid_index索引的位置切片到最后
                search(num,data) #这是的num还是输入的查找数据,但data已经不是原有的data数据了,而是被切片后的data数据
            elif num < mid_value:
                #num在列表的左边
                data=data[:mid_index]
                search(num,data)
            else:
                print('find it',num)
                return
        else:
            if data[0] == num:  #列表长度小于1
                print('find it',num)
            else:
                print('not exists')
    
    search(9527,data)
    search(17,data)
    search(1,data)

      二分查找进阶:有起始和结束位置。

    l =[]
    for i in range(50):
        if i%2==0:
            l.append(i)
    # print(l.index(26))
    
    def func(l,aim,start,end):
        """
        start和end可以限定查找的范围
        :param l: 列表
        :param aim: 要查找的数
        :param start: 列表开始查找的位置,列表的索引值
        :param end: 列表结束结束查找的位置,列表的索引值
        :return: 查找结果
        """
        mid = (start+end)//2
        if start < end:
            if l[mid] > aim:
                end = mid-1
                return func(l,aim,start,end)
            elif l[mid] < aim:
                start = mid+1
                return func(l,aim,start,end)
            else:
                # mid 打印索引值,l[mid]打印索引对应的值
                # return mid
                return l[mid]
        else:
            return "二货,没有这个数,瞎找啥呀!"
    
    here1 = func(l,27,start=0,end=len(l)-1)
    here2 = func(l,26,start=0,end=len(l)-1)
    print(here1)
    print(here2)   

    ------------ END -----------

  • 相关阅读:
    剑指 Offer 55. 二叉树的深度
    剑指 Offer 11. 旋转数组的最小数字
    [COCOS2DX-LUA]0-006.cocos2dx中关于拖动屏幕物件,同时点击home键,返回后页面变黑的问题。
    Kafka 入门(三)--为什么 Kafka 依赖 ZooKeeper?
    Kafka 入门(二)--数据日志、副本机制和消费策略
    Kafka 入门(一)--安装配置和 kafka-python 调用
    网络通信基础笔记
    项目经理的必要性
    Jenkins用户管理
    JVM笔记二双亲委派机制
  • 原文地址:https://www.cnblogs.com/george92/p/14486270.html
Copyright © 2011-2022 走看看