十大算法

本文详细介绍了三种常见的排序算法:冒泡排序、选择排序和插入排序。通过具体的Python代码示例,展示了每种算法的工作原理和优化过程,帮助读者深入理解算法的实现细节。

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

时间复杂度O(n)
在这里插入图片描述
1.冒泡排序
(1)比较相邻的元素。如果第一个比第二个大,就交换它们两个
(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数
(3)针对所有的元素重复以上的步骤,除了上次的最后一位在这里插入图片描述

#!/usr/bin/python3
lst=[1,9,8,5,6,7,4,3,2]
for i in range(len(lst)):
	for j in range(len(lst)-1-i):
		if lst[j]>lst[j+1]:
			lst[j],lst[j+1]=lst[j+1],lst[j]
print(lst)

优化后:

#!/usr/bin/python3
lst=[1,9,8,5,6,7,4,3,2]
for i in range(len(lst)):
	flag=False
	for j in range(len(lst)-1-i):
		if lst[j]>lst[j+1]:
			lst[j],lst[j+1]=lst[j+1],lst[j]
			flag=True
		if not flag:
			break
print(lst)
优化后降低了运算次数,提高了运算及效率

2.选择排序
n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。在这里插入图片描述

	#!/usr/bin/python3
	import time
	nums=[1,9,8,5,6,7,4,3,2]
	for i in range(len(nums)):
		minindex=i
		for j in range(i+1,len(nums)):
			if nums[i]>nums[j]:
				minindex=j
			if minindex!=i:
				nums[i],nums[minindex]=nums[minindex],nums[i]
	print(nums)
优化后
	倒序排列
#
		#!/usr/bin/python3
		import time
		lst=[1,9,8,5,6,7,4,3,2]
		for i in range(len(lst)//2):
			maxindex=i
			minindex=-i-1
			for j in range(i+1,len(lst)):
				if lst[maxindex]<lst[j]:
					maxindex=j
				if lst[minindex]>lst[-j-1]:
					mindex=-j-1
			if i!=maxindex:
				lst[i],lst[maxindex]=lst[maxindex],lst[i]
				if i==minindex or i==len(lst)+minindex:
					minindex=maxindex
			if -i-1!=minindex:
				lst[-i-1],lst[minindex]=lst[minindex],lst[-i-1]
		print(lst)
顺序排列(只是改变了条件中大小符号)
	#
	#!/usr/bin/python3
	import time
	lst=[1,9,8,5,6,7,4,3,2]
	for i in range(len(lst)//2):
		maxindex=i
		minindex=-i-1
		for j in range(i+1,len(lst)):
			if lst[maxindex]>lst[j]:
				maxindex=j
			if lst[minindex]<lst[-j-1]:
				mindex=-j-1
		if i!=maxindex:
			lst[i],lst[maxindex]=lst[maxindex],lst[i]
			if i==minindex or i==len(lst)+minindex:
				minindex=maxindex
		if -i-1!=minindex:
			lst[-i-1],lst[minindex]=lst[minindex],lst[-i-1]
	print(lst)

3.插入排序
和冒泡思想差不多,就是依次和前边比但是不用每次换位,找到合适位置一次插入即可在这里插入图片描述

#!/usr/bin/python3
import random
lst=[1,9,8,5,6,7,4,3,2]
for i in range(1,len(lst)):
	tempnum=lst[i]
	j=i-1
	while tempnum<lst[j]:
		lst[j+1]=lst[j]
		j-=1
		if j<0:
			break
	lst[j+1]=tempnum
print(lst)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值