百度百科对冒泡排序的算法原理描述:

 

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)     # 输出最终结果

 

pastedGraphic.png

 


输出每次遍历结果

 

其中 a[k], a[l] = a[l], a[k] 可以改成 c = a[k], a[k] = a[l], a[l ] =c,c相当于临时变量

 

另外代码还可以进行优化,将条件 b 放到 for 循环中

for i in range(b, 0, -1)————含义:b-0是范围,每次循环结束后减1

 

pastedGraphic_1.png

 


调试过程

 

总结

 

其实算法不难,先理清思路问题就变得简单了,然后就可以尝试着输出代码了,debug 是个很好的帮手,一步步调试看数据是如何变化的,可以更好的理解程序是怎么实现这段代码的

 

请思考:如何一行代码搞定(顺序 or 倒序显示)

公布答案(可以复制代码到 IDE 中执行查看结果)

print(sorted(a))   #  顺序

print(sorted(a, reverse=True))   # 倒序

 

注解:

 

sorted函数 不会改变列表本身(可理解为先复制列表,再顺序整理),参数 reverse 用于逆序排序