python二分查找法

简介:

一、概述

1、条件
不是所有数据类型都可以应用二分查找法,他需要满足以下的条件:
是一个有序序列(索引数组),且是已经排好序的序列.
2、查找原理
在一个有序序列中查找一个指定的数,如果首先和这个序列的中间数相比如果相等就找到返回,如果比这个中间数小,即在序列左边找,如果比中间数大就从右边查找,直到找到或未找到返回.

二、python代码实现

知道了条件和原理后,其他任何一门语言都可实现,以下是python代码的简单实现.
参考代码

import math

L = [1,56,58,60,66,70,7,98,100,111,49999,99999]
count = 0     #定义统计查找次数
#查找是否在列表中
def bin_search(arg,num):
    global count
    begin = 0
    end = len(arg) -1    #最后一个索引
    mid = math.floor((end - begin)/2)  #获取中间数索引,math.floor用于获取向下取整
    mid_value = arg[mid]                 #中间数
    try:
        if mid_value == num:               #要找的数刚好是中间数
            count +=1
            ret = "%d在列表中,共查找了%d" %(num,count)
        elif mid_value > num:    #说明在左侧
            count += 1
            ret = bin_search(arg[:mid],num)  #从原列表的开始到中间索引为新查找的位置
        else:                      ##说明在右侧
            count += 1
            ret = bin_search(arg[mid+1:],num)        #从原列表的中间到最右(后)的位置
        return ret
    except:
        return "%d 不在列表中!" %num

查找66是否在列表中 并统计查找次数
print(bin_search(L,66))
如图:
python二分查找法

再来查找88时提示没有找到,如图:
print(bin_search(L,88))
python二分查找法

添加以下代码我们看看一个长度为100000的列表中查找L中的各元素各需要多少次

L1 = [ ]
for i in range(100000):   #生成100000长度的列表
    L1.append(i)

for num in L:
    print(bin_search(L1,num))
    count = 0

运行结果如下:
python二分查找法
请注意:在一个长度为100000的序列中找49999这个数,一次就找到了,只因为它是中间数.

总结:

通过二分查找法去查找一个数是否在列表中,要查找的数是中间数时,只要一次就能找到,最差的情况就是n/2 =0时,n为序列长度 但最后等于0时要么找到要么没有找到.不管怎么样比冒泡排序效率要高的多.不需要一个一个的元素比对.










本文转自 dyc2005 51CTO博客,原文链接:http://blog.51cto.com/dyc2005/2051124,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
算法 索引 Python
Python中如何实现二分查找?请提供代码示例。
Python中如何实现二分查找?请提供代码示例。
23 0
|
2月前
|
算法 开发者 索引
深入理解Python中的二分查找与bisect模块
深入理解Python中的二分查找与bisect模块
|
3月前
|
机器学习/深度学习 存储 算法
Python排序——二分查找
Python排序——二分查找
26 0
|
5月前
|
Python
【python】二分查找
【python】二分查找
16 0
|
5月前
|
算法 索引 Python
如何实现二分查找算法? 要求:编写一个Python函数,输入一个有序列表和一个目标值,返回目标值在列表中的索引。如果目标值不在列表中,返回-1。
如何实现二分查找算法? 要求:编写一个Python函数,输入一个有序列表和一个目标值,返回目标值在列表中的索引。如果目标值不在列表中,返回-1。
|
7月前
|
存储 算法 数据库
【Python查找算法】二分查找、线性查找、哈希查找
【Python查找算法】二分查找、线性查找、哈希查找
66 0
|
9月前
|
编译器 Serverless Python
python--递归、遍历文件夹、二分查找
python--递归、遍历文件夹、二分查找
|
10月前
|
算法 索引 Python
优雅实现Python二分查找:探索高效的有序数据搜索策略
二分查找是一种高效的搜索算法,用于在有序数组中查找特定元素。它的思想是将查找范围逐渐缩小一半,直到找到目标元素或确定目标元素不存在。本文将介绍二分查找的基本原理,并通过Python代码进行详细讲解。
106 0
|
11月前
|
算法 Python
Python实现二分查找算法
Python实现二分查找算法
62 0
|
11月前
|
算法 Python
Python|二分查找算法解决包裹最低运载问题
Python|二分查找算法解决包裹最低运载问题
64 0