百度百科对冒泡排序的算法原理描述:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
源代码:
a = [500, 432, -23, 73, 98, 23, -765, 11, 0, 69, 4]
b = len(a) - 1
while b:
for i in range(b):
j = i + 1
if a[i] > a[j]:
a[i], a[j] = a[j], a[i]
b -= 1 # b = b -1
print(a) # 需注意print的缩进位置,输出每一次遍历后的结果
# print(a) # 输出最终结果
输出每次遍历结果.png
其中 a[k], a[l] = a[l], a[k] 可以改成 c = a[k], a[k] = a[l], a[l ] =c,c相当于临时变量
调试过程.png另外代码还可以进行优化,将条件 b 放到 for 循环中
for i in range(b, 0, -1)---------含义:b-0是范围,每次循环结束后减1
总结
其实算法不难,先理清思路问题就变得简单了,然后就可以尝试着输出代码了,debug 是个很好的帮手,一步步调试看数据是如何变化的,可以更好的理解程序是怎么实现这段代码的
请思考:如何一行代码搞定(顺序 or 倒序显示)
公布答案(可以复制代码到 IDE 中执行查看结果)
print(sorted(a)) # 顺序
print(sorted(a, reverse=True)) # 倒序
注解:
sorted函数 不会改变列表本身(可理解为先复制列表,再顺序整理),参数 reverse 用于逆序排序
网友评论