【数据结构】——冒泡排序、插入排序、选择排序

# 冒泡排序,复杂度为O(n^2)
def bubble_sorted(li:list)->list:
	for i in range(len(li)):# 第几趟
		exchanged = False# 这个是为了防止多余的遍历,如果前面的元素已经是排序好的,那就不需要再进行比较了,减少运行时间
		for j in range(len(li)-1):# 遍历列表元素
			if li[j] > li[j+1]:
				li[j],li[j+1] = li[j+1],li[j]
				exchanged = True
		if not exchanged:
			return li

# 选择排序,复杂度为O(n^2),思路是遍历一趟元素后,选择最小的值放在无序区的第一位
def select_sorted(li:list)->list:
	for i in range(len(li)):
		min_loc = i# 初始化最小值的位置为第一个
		for j in range(i+1,len(li)-1):
			if li[j]<li[min_loc]:
				li[j],li[min_loc] = li[min_loc],li[j]# 交换元素
	return li

# 插入排序,复杂度为O(n^2),思路是从左到右抽取一个元素,将这个元素,与左边邻近的元素比较,若比左边的小,则左边元素右移,
# 若不比左边的小了或者已经到最左边了,则将抽取的元素赋值给原本左边元素
def insert_sorted(li:list)->list:
	for i in range(1,len(li)):# 趟数,也就是抽牌的顺序,从第一张牌开始抽
		tmp = li[i]
		j = i - 1# 左边元素
		while j >= 0 and li[i] < li[j]:# 若抽取的元素小于邻近左边的元素,则将左边元素右移一格
			li[j+1] = li[j]
			j -= 1
		# 这时候的j已经不满足上述条件了,因此这个j位置上的元素没有移动,而j+1上位置的元素移动了是空的
		li[j+1] = tmp
	return li

def insert1_sorted(li:list)->list:
	for i in range(1,len(li)):# 趟数,也就是抽牌的顺序,从第一张牌开始抽
		tmp = li[i]
		for j in range(i - 1,1):
			if li[i] < li[j] and (li[i] > li[j - 1]):
				li[j+1] = li[j]
				li[j] = tmp
	return li


if __name__ == '__main__':
	li = [9,3,7,1,4,2,5,8]
	print(bubble_sorted(li))
	print(select_sorted(li))
	print(insert_sorted(li))
	print(insert1_sorted(li))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有情怀的机械男

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值