python基础-折半查找

这篇博客详细介绍了Python中的折半查找算法。首先分析了需求,然后通过逐步分解,从比较两个数到找到数列中间位置,再到处理查找位置的逻辑,最终将算法封装为自定义函数。博客还提供了总结和思维导图,便于读者理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用我的飞书知识文档:https://ir6elb7gt2.feishu.cn/wiki/wikcnEvrnfdxnMJmy3Dx2o29Wih?office_edit=1

 目录

一、需求分析

二、编程思想

2.1 需求分析

2.2 需求分解

三、总结

四、思维导图


一、需求分析

  • 折半查找:在一串基本有序的数字中找到数字,每次从中间位置开始找

  • 算法设计:

  • 语法知识:

语法

描述

类型转换

类型名(要转化的内容)

分支结构

If:

elseif: else:

循环结构

while

自定义函数

def(函数)

函数调用

函数调用及返回值

  • 触类旁通:

二、编程思想

2.1 需求分析

  • 折半查找:在一串基本有序的数字中找到数字,每次从中间位置开始找​​​​​​

2.2 需求分解

V1.0 :进行两个数的比较

参数列表:罗列代码中涉及的参数和含义

V2.0 :找到一个数列的中间位置开始查找

b=[10,14,18,20,21,23,26,29,32]

left=0, right=8, mid=4, mid=(left+right)//2 //-整除

#  V2.0 :找到一个数列的中间位置开始查找
#  V2.0 :找到一个数列的中间位置开始查找
b = [10, 14, 18, 20, 21, 23, 26, 29, 32]
n = len(b)
left = 0
right = n
mid = (left+right)//2
print("mid=", mid)
a = input("请输入a")
if a == b[mid]:
    print("两个数相等")
else:
    print("两个数不相等")
'''
D:\WMM_Python2\1_PythonBasic\venv\Scripts\python.exe D:/WMM_Python2/1_PythonBasic/aric/search2.py
请输入a44
两个数不相等
请输入a21
两个数不相等
'''

V3.0 :查找位置的处理

如果中间位置的元素小于查找的数字,在后半段查找,left=mid+1

如果中间位置的元素大于查找的数字,在前半段查找,right=mid-1

#  V3.0 :查找位置的处理
b = [10, 14, 18, 20, 21, 23, 26, 29, 32]
n = len(b)
left = 0
right = n
mid = (left+right)//2
print(b[mid])
a = int(input("请输入a"))
if a > b[mid]:
    left = mid+1
elif a < b[mid]:
    right = mid-1
else:
    print("找到a啦")
mid = (left+right)//2
print("新的中间位置mid:", mid, "元素值为:", b[mid])
'''
D:\WMM_Python2\1_PythonBasic\venv\Scripts\python.exe D:/WMM_Python2/1_PythonBasic/aric/search3.py
21
请输入a5
新的中间位置mid: 1 元素值为: 14
请输入a27
新的中间位置mid: 7 元素值为: 29
'''

V4.0 :折半查找循环处理

#  V4.0 :折半查找循环处理
b = [10, 14, 18, 20, 21, 23, 26, 29, 32]
n = len(b)
left = 0
right = n
mid = (left+right)//2
print(b[mid])
a = int(input("请输入a"))
while (left <= right):
    if a > b[mid]:
        left = mid+1
    elif a < b[mid]:
        right = mid-1
    else:
        print("找到a啦")
        break
    mid = (left+right)//2
    print("新的中间位置mid:", mid, "元素值为:", b[mid])
else:
    print("找不到该数字")
'''
D:\WMM_Python2\1_PythonBasic\venv\Scripts\python.exe D:/WMM_Python2/1_PythonBasic/aric/search4.py

请输入a3
新的中间位置mid: 1 元素值为: 14
新的中间位置mid: 0 元素值为: 10
新的中间位置mid: -1 元素值为: 32
找不到该数字
请输入a30
新的中间位置mid: 7 元素值为: 29
新的中间位置mid: 8 元素值为: 32
新的中间位置mid: 7 元素值为: 29
找不到该数字
请输入a14
新的中间位置mid: 1 元素值为: 14
找到a啦
请输入a32
新的中间位置mid: 7 元素值为: 29
新的中间位置mid: 8 元素值为: 32
找到a啦
'''

V5.0 :写入一个自定义函数中

自定义函数:把一段代码放入自定义函数,可以实现反复使用

语法形式:

  • def函数名():函数的定义

  • 函数名():调用函数

  • #  V5.0 :自定义函数
    def search(a, ls):
        n = len(ls)
        left = 0
        right = n
        mid = (left+right)//2
        # print("中间位置mid:", mid, "元素值为:", ls[mid])
        while (left <= right):
            if a > ls[mid]:
                left = mid+1
            elif a < ls[mid]:
                right = mid-1
            else:
                # print("找到a啦")
                return 0
            mid = (left+right)//2
            # print("新的中间位置mid:", mid, "元素值为:", ls[mid])
        # else:
        # print("找不到该数字")
        return 1
    
    
    a = int(input("请输入a"))
    ls = [10, 14, 18, 20, 21, 23, 26, 29, 32]
    result = search(a, ls)
    if result == 0:
        print("找到a啦")
    else:
        print("找不到该数字")
    '''
    D:\WMM_Python2\1_PythonBasic\venv\Scripts\python.exe D:/WMM_Python2/1_PythonBasic/aric/search5.py
    请输入a1
    找不到该数字
    请输入a23
    找到a啦
    '''
    

     

三、总结

总结本次技术应用中可积累的代码和经验

 

 

四、思维导图

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值