二分法查找(算法图解笔记1)

1 二分查找每次能排除一半的量,那么显然 ,二分法的速率是O(logn)。 (2^logn = n)
2 二分法必须用于已排序的数据.
3 五种最常见的大O运行时间 (大O指一个算法最坏情况下的运行操作数,算法的速度指的并非时间,而是操作数的增速,谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。在近似情况下,操作数可以表示运行时间)

操作数名称常见算法
O(logn)对数时间二分法
O(n)线性时间简单排序
O(nlogn)/快速排序
O(n^2)平方时间选择排序
O(N!)/旅行商问题穷举法

二分法流程图
在这里插入图片描述

一般的二分法查找代码

list_test = [1,3,5,7,9,11,13]       
 
def binary_search(List, x):
    ''' input a list and x ,output the index of item in the list 
        return -1 if it doesn't exist'''
    Min = 0 ; Max =  len(List)-1  
    while Min <= Max:  # 只要包含一个数验证
        mid =int( (Min+Max)/2 )
        mid_value = List[mid]
        print(Min,mid, Max)
        if Min==mid:  #  mid 和 min 相等, 验证两边是否是要找的数 。 找不到跳出循环
            Min = mid+1
        elif x==mid_value: 
            return mid  # mid 就是要找的数 ,返回mid
        elif x> mid_value:
            Min = mid  #  猜小了, 修改min
        elif x < mid_value:
            Max = mid  #  猜大了, 修改max
    return -1    
  
binary_search(list_test,11)     
0 6
3 6
4 6
Out[103]: 5

binary_search(list_test,100) 
0 6
3 6
4 6
5 6
6 6
Out[104]: -1

binary_search(range(10000000),99)           
0 9999999
0 4999999
0 2499999
0 1249999
0 624999
0 312499
0 156249
0 78124
0 39062
0 19531
0 9765
0 4882
0 2441
0 1220
0 610
0 305
0 152
76 152
76 114
95 114
95 104
Out[102]: 99
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值