Python实现几种简单算法的查找

本文介绍了冒泡排序、选择排序两种简单的排序算法,以及顺序查找和二分法查找的基本思想和实现原理。通过实例展示了如何在升序和降序列表中使用这些方法。
摘要由CSDN通过智能技术生成

1. 冒泡排序

排序思路:比较两个相邻的下标的对应元素,如果符合条件就交换位置(最值出现在最后位)

在这里插入图片描述

冒泡排序的实现原理

# 降序为例
list1 = [34,45,6,74,45,5,6,7,10,67]

# 外层循环:控制的是比较的次数
for i in range(len(list1)-1):
	# 内层循环:控制的是每一轮比较的次数,同时兼顾参与比较的下标
	for j in range(len(list1)-1-i):
		# 比较:只要符合条件的则交换位置
		# 如果下标小的元素>下标大的元素,则交换位置
		# 参与比较的下标,j和j+1
		if list1[j]<list1[j+1]:
			list1[j],list1[j+1] = list1[j+1],list1[j]
print(list1)	

2. 选择排序

排序思路:固定一个下标,然后拿这个下标对应的值和后面的元素进行比较,最值出现在头角标对应的位置
在这里插入图片描述

选择排序的实现原理
# 选择排序
# 以升序为例
list1 = [34,45,6,74,45,5,6,7,10,67]

# 外层循环:控制的是比较的轮数
for i in range(len(list1)-1):
	# 内层循环:控制的是每一轮比较的次数,兼顾参与比较的下标
	for j in range(i+1, len(list1)):
	# 比较:只要符合条件就交换位置
	# 如果下标小的元素>下标大的元素,则交换位置
	# 参与比较的下标,i和j
	if list1[i] > list1[j]:
		list1[i],list1[j] = list1[j],list1[i]
print(list1)

3. 顺序查找(不算是一种算法,作为二分法的补充)

查找思路:将待查找的元素和指定列表中的元素进行依次比对,如果相等,则获取对应的索引即可

list1 = [34,45,6,74,45,5,6,7,10,67]
key = 45
for i in range(len(list1)):
	if list1[i] == key:
		print(i)
		break
else:
	print(f'{key}在列表中不存在')

4. 二分法查找

查找思路:如果列表是升序的前提下,将待查找的元素与中间下标对应的元素比较,如果大于中下标对应的元素,则去右半部分查找
注意:前提是列表是有序(升序或者降序)的,通过折半来缩小查找范围,提高查找效率

在这里插入图片描述

二分法查找的实现原理

# 二分查找
# 以升序为例
list1 = [34,45,6,74,45,5,6,7,10,67]
list1.sort()

# 带查找元素
key = 100
# 定义变量,分别表示索引的最大值和最小值
left = 0
right = len(list1)-1

# left在逐渐增大,right在逐渐减小,在改变的过程中,直到left == right还未找到指定元素,则说明该元素不存在
while left <= right:
	# 计算中间下标
	middle = (left + right)//2
	
	# 比较
	if key > list1[middle]:
		# 重置left的值
		left = middle +1
	elif key < list1[middle]:
		# 重置right的值
		right = middle - 1
	else:
		print(f'待查找元素{key}在列表的索引为:{middle}')
		# 如果查找到,则可以提前结束循环,注意,只能获取一个索引
		break
else:
	print(f'{key}在列表中不存在')
		
  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值