【一】二分法
- 二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法
- 思路:
- 首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
- 如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤的操作。
- 如果某一步数组为空,则表示找不到目标元素
- 模板
- 以下是二分法常用的模板,包括查抄指定数、查找左边界和右边界。
(1)查找指定数
- 查找指定数是指只需要查找出指定数在数组中的索引即可,并不规定指定数在数组中所处的相对位置。
def binary_Search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (right + left) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
nums = [1, 8, 9, 7, 4, 5, 3, 1, 6]
target = 6
result = binary_Search(nums, target)
print(result)
- 注意:
- 主要是要理解左边界查找和查找指定数的区别,在查找指定数时
nums[mid] == target
表示已经找到指定数,则返回该数索引即为结果。
- 而在左边界查找时
nums[mid] == target
并不能表示已经得到结果,因为我们不知道这个数是不是最左边的,所以当nums[mid] == target
时我们要将右边界设置为mid - 1
,再次进行循环。
(2)右边界查找
- 右边界查找跟左边界类似,只不过右边界需要的是查找出最后一次出现的位置的索引。
def left_Search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (right + left) // 2
if nums[mid] <= target:
left = mid + 1
else:
right = mid - 1
if right < 0 or nums[right] != target:
return -1
return right
nums = [1, 8, 9, 7, 4, 5, 3, 1, 6]
target = 6
result = left_Search(nums, target)
print(result)
【二】冒泡排序
- 两个数比较大小,较大的数下沉,较小的数冒起来。
- 过程:
- 比较相邻的两个数据,如果第二个数小,就交换位置。
- 从后向前两两比较,一直到比较最前两个数据。
- 最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。
- 继续重复上述过程,依次将第2.3...n-1个最小数排好位置。
def bubble_sort(data):
for i in range(len(data)):
print(f'这是后{i}趟')
for j in range(len(data) - 1 - i):
if data[j] > data[j + 1]:
data[j], data[j + 1] = data[j + 1], data[j]
print('差的排序结果为:>>>', data)
start_list = [3, 9, 3, 1, 7, 7]
bubble_sort(start_list)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南