引用我的飞书知识文档:https://ir6elb7gt2.feishu.cn/wiki/wikcnEvrnfdxnMJmy3Dx2o29Wih?office_edit=1
目录
一、需求分析
-
折半查找:在一串基本有序的数字中找到数字,每次从中间位置开始找
-
算法设计:
-
语法知识:
语法 | 描述 |
类型转换 | 类型名(要转化的内容) |
分支结构 | 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啦 '''
三、总结
总结本次技术应用中可积累的代码和经验
四、思维导图