python手写十大经典排序算法 一.冒泡排序法

半腔热情 提交于 2020-02-29 19:30:06

冒泡排序

(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)


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!