python_算法_二分查找

不建议大家看这篇文章, 因为我自己看着都头晕

二分查找:

二分查找的前提条件是:
只能在有序的列表内进行查找
精简版:
def bin_search(data, find_num):
    first = 0
    last = len(data)-1
    while first <= last:
        mid = (first+last)//2
        if data[mid] == find_num:
            return mid
        if data[mid] < find_num:
            first = mid + 1
        if data[mid] > find_num:
            last = mid - 1

    else:
        not_find_num = "没找到"
        return not_find_num
啰嗦版:
def bin_search(data, find_num):
    # 起始下标
    first = 0
    # 终止下标
    last = len(data)-1
    # 如果这个序列不为空就要一直查找
    while first <= last:
        # 设置中间下标,
        mid = (first+last)//2
        # 如果中间的数, 等于要查找的数, 返回这个数的下标
        if data[mid] == find_num:
            return mid
        
        # 如果中间的数, 小于要查找的数, 将中间数的下标加一, 作为下一步要查找的起始下标
        if data[mid] < find_num:
            first = mid + 1
        # 如果中间的数, 大于要查找的数, 将中间数的下标减一, 作为下一步要查找的末尾下标
        if data[mid] > find_num:
            last = mid - 1

    else:
        not_find_num = "没找到"
        return not_find_num
    '''关于下标加一减一的问题: 
        因为中间数已经跟要查找的数进行比对了,
        1. 如果相等跳出循环,返回要查找的值
        2. 如果大于, 就减一 
        3. 如果小于, 就减一'''
二分查找的基本思想:精简版
1. 在一个有序的列表内,查找你想要的数字.
2. 先设定起始下标,与结束下标,然后取出中间下标的值
3. 让中间坐标的值,与要查找的值进行比对
    1.如果中间值等于要查找的值,直接返回中间值
    2.如果中间值,小于要查找的值,那么将中间值的下标加一,作为下一次查找的起始下标
    3.如果中间值,大于要查找的值,那么将中间值的下标减一作为下一次查找的终止下标
    注释:关于中间值下标加一减一的操作
        因为中间值已经跟要查找的值进行比对了
            1.如果相等跳出循环,返回要查找的值
            2.如果大于,下一次寻找的值,当然不包含当前值,所以进行坐标减一操作
            3.如果小于,原理同上
    4. 按照此原理直到找到为止
二分查找的基本思想:啰嗦版
1. first_num = 0  #起始下标 
2. last_num = len(data)-1  #终止下标
3. mid_num = (first_num+last_num)//2  #中间坐标
4. find_num  #要查找的坐标
5. data #列表

1. 在一个有序的列表内(data),查找你想要的数字(find_num).
2. 先设定起始下标(first_num),与结束下标(last_num),然后取出中间下标的值(mid_num)
3. 让中间坐标的值data[mid_num],与要查找的值进行比对(find_num)

    1.如果中间值等于要查找的值,直接返回中间值
        if data[mid] == find_num:
            return data[mid]
    2.如果中间值,小于要查找的值,那么将中间值的下标加一,作为下一次查找的起始下标
        if data[mid] < find_num:
            first_num = mid_num + 1
    
    3.如果中间值,大于要查找的值,那么将中间值的下标减一作为下一次查找的终止下标
        if data[mid] > find_num:
            last_num = mid_num -1
    注释:关于中间值下标加一减一的操作
        因为中间值已经跟要查找的值进行比对了
            1.如果相等跳出循环,返回要查找的值
            2.如果大于,下一次寻找的值,当然不包含当前值,所以进行坐标减一操作
            3.如果小于,原理同上
    4. 按照此原理直到找到为止
二分查找演示:
import time

# 先定义一个计算Demo运行时间的装饰器
def GetRunTime(func):
    def call_func(*args, **kwargs):
        begin_time = time.time()
        ret = func(*args, **kwargs)
        end_time = time.time()
        Run_time = end_time - begin_time
        print(str(func.__name__)+"函数运行时间为"+str(Run_time))
        return ret
    return call_func


# 二分查找
@GetRunTime
def bin_search(data, find_num):
    first = 0
    last = len(data)-1
    while first <= last:
        mid = (first+last)//2
        print("演示下查找的过程"+str(data[mid]))
        if data[mid] == find_num:
            return mid
        if data[mid] < find_num:
            first = mid + 1
        if data[mid] > find_num:
            last = mid - 1

    else:
        not_find_num = "没找到"
        return not_find_num


    
    
data = list(range(1000000))
print("二分查找:" + str(bin_search(data, 200)))
演示如下:
二分查找.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容