冒泡排序
(1)实现步骤
1.比较相邻两个元素,如果第一个比第二个大就交换对应位置
2.对每一对相邻元素作同样的操作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
(2)动画演示
(3)手撸代码
老铁看图,我在给您亲自捋一遍,如何用python实现冒泡排序.首先循环嵌套是跑不了,外层循环是用来控制运行次数,内层循环是实现,相邻两个位置上数的大小比较.
lst = [5,9,4,8,7] # 设置一个待排序的数列
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]
```python
在这里插入代码片
(4)优化
如果说对于一个lst这种的,正好符合顺序,而常规操作,依旧是对他进行一遍无用操作
因此可得:优化点就是,尽量减少无用操作.只要知道本趟一次都没有交换位置的,就可以知道了,已经完成排序了.
解决方式:增加一个控制阀参数flag 满足条件了break
lst=[1,2,3,4,5,6,7,8,9]
# 优化冒泡
for i in range(len(lst)):
flag = False
for j in range(len(lst)-i-1):
if lst[j]>lst[j+1]:
lst[j],lst[j+1] = lst[j+1],lst[j]
flag = True
if not flag:
break
添加一个开关阀flag
(5)时间复杂程度
O(n^2)
(6)空间复杂程度
O(1)
来源:CSDN
作者:Monster123$
链接:https://blog.csdn.net/weixin_45154559/article/details/104522654