Python语言二分法查找

简介: Python语言二分法查找Python语言二分法查找

前言
二分法也就是二分查找,它是一种效率较高的查找方法。

假如你们公司新来了一个人,叫张三,他是你们公司第47个人,过了一段时间后,有些人呢看张三不爽,离职了,那这时候张三肯定不是公司第47个人了,怎么样才知道张三排第几呢,下面我们用二分法把他找出来

思路
给你一本1000页的书籍,随机给定一个页码,如何用最快的方式找到它?如果一页一页逐步去查找,则最高需要查找一千次!那我们如何用二分法来解决这个问题呢?二分法的关键就是二分这个词。

步骤1:设定一个页码作为中心点来将1000页分为两份,中位数的作用就是每次缩小一半查找范围,即达到开方的效果。即可以用 (首位+末位)/2 = 中位数。

步骤2:将需要查找的页码与中位数比价,如果大于中位数则舍弃对中位数的前一半查找,反之则舍弃对后一半范围查找,达成开方效果。 步骤3:在新的查找范围重新计算出中位数

步骤4:查找页码对比中位数,确定新的查找范围 步骤5:循环以上步骤,直到找到该页码为止

.......

代码
通过以上思路解析,我们知道了二分法实行步骤,接下来就通过代码来实现步骤,首先是循环实现

模拟页码

array = [1, 3, 4, 6, 7, 8, 9, 11, 15, 17, 19, 21, 22, 25, 29, 33, 38, 69,99,107]

首位值

low = 0

末位值

height = len(array)-1

设定查找页码

findNum = 1

循环查找

while True:

#获取中位数
mid = int((low+height)/2)
#打印中位数,查看循环次数
print(array[mid])
#如果中位数小于查找值,则锁定后半段
if array[mid] < findNum:
    #重置低位数
    low = mid + 1
#如果中位数大于查找值,则锁定前半段
elif array[mid] > findNum:
    #重置高位值
    height = mid - 1
#找到数字则打印该值下标,终止循环
elif array[mid]==findNum:
    print('find it:',array[mid],' index:',mid)
    break

除了上述方式外,也可以使用递归来实现,代码更加简洁

array = [1, 3, 4, 6, 7, 8, 9, 11, 15, 17, 19, 21, 22, 25, 29, 33, 38, 69,99,107]

函数递归

定义一个函数,给三个形参:低位值,高位值,查找值

def BinarySearch(low,height,findNum):

#计算出中位数
middle = (low+height)//2
#如果中位数小于查找值,则锁定后半段
if findNum >array[middle]:
    #重置低位数
    low = middle +1
#如果中位数大于查找值,则锁定前半段
elif findNum<array[middle]:
    #重置高位值
    height = middle - 1
else:
    #找到该值并返回
    return '该值下标为:%s,值为:%s'%(middle,array[middle])
#没有找到则调用自身继续查找
return BinarySearch(low,height,findNum)

print(BinarySearch(array[0],len(array)-1,19))

总结

根据结果反馈,使用二分法常规Python检索用循环方式找数字21,他是排在11位,中位数查询3次,使用Python二分法检索递归方式先取查询数字的倍数,然后锁定前半段进行索引,索引的步骤耗时更少

目录
相关文章
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
Python 语言的瑰宝:数据科学中的无限潜能
在当今数字化时代,数据科学的应用已成为推动企业和学术界前进的重要力量。而Python语言,作为一门简洁、灵活且功能强大的编程语言,正日益成为数据科学领域的首选工具。本文将探讨Python语言在数据科学中的广泛应用,从数据分析到机器学习,再到人工智能。
|
7月前
|
机器学习/深度学习 数据可视化 数据挖掘
为什么Python是数据科学家的首选语言
为什么Python是数据科学家的首选语言
32 0
|
7月前
|
JavaScript 前端开发 Java
入门Python编程:了解计算机语言、Python介绍和开发环境搭建
入门Python编程:了解计算机语言、Python介绍和开发环境搭建
102 0
|
8月前
|
SQL 关系型数据库 数据库连接
【Python入门系列】第七篇:Python数据库操作和SQL语言
本文介绍了使用Python进行数据库操作的基本知识,包括连接数据库、执行SQL查询和更新操作等。同时,还介绍了SQL语言的基本语法和常用的查询语句。通过学习本文,读者将能够使用Python与各种类型的数据库进行交互,并掌握基本的SQL语言知识。
116 0
|
5天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
1月前
|
XML 数据采集 数据格式
Python语言的结构化标志语言处理
Python语言的结构化标志语言处理
|
2月前
|
Rust API Android开发
Python潮流周刊#4:Python 2023 语言峰会
Python潮流周刊#4:Python 2023 语言峰会
18 2
|
2月前
|
JavaScript 前端开发 C语言
Python 到底是强类型语言,还是弱类型语言?
Python 到底是强类型语言,还是弱类型语言?
17 2
|
2月前
|
开发者 Python
Python中的元编程:扩展语言的力量
【2月更文挑战第5天】本文将探讨Python中的元编程,介绍了元编程的概念和意义,并详细讨论了Python中常用的元编程技术,如装饰器、元类和动态类型。通过元编程,我们可以在不改变语言核心的情况下,扩展Python的功能和灵活性,为开发者提供更强大的工具和框架。
|
9月前
|
存储 编译器 索引
Python 零基础学学习笔记——语言基础
Python 零基础学学习笔记——语言基础