冒泡排序详解

最近 许多同学询问我关于冒泡排序的问题.
emmmm…

其实理解了就是很简单的东西, 我用我自己的话描述一下每一步是在做什么吧(如果描述不到位还请理解),后面再把代码执行顺序拆给大家看看_

#冒泡排序

#一个乱序list
array = [9,3,5,3,2,7,6,6,0,8,1]

#排序代码
for i in range(len(array)-1, 0, -1):
    for j in range(0, i):
        if array[j] > array[j+1]:
            array[j], array[j+1] = array[j+1], array[j]

print(array)

#排序结果
[0, 1, 2, 3, 3, 5, 6, 6, 7, 8, 9]
  1. 最外层for循环,决定对array排序执行次数;
  2. len(array)-1, 长度为len(array), 需要执行排序次数为len(array)-1, 因为最后剩下来的一个就不用排了. 且 i 在内层for循环时,需要被当作索引去array中取值, 索引从0开始, 所以索引最大为 len(array)-1,超出会报错;
  3. 内层for循环 对array当前 i 个值两两比较进行排序(或者说进行 i-1 次两两排序);
  4. 外层for循环 会决定列表执行排序次数;
  5. range(len(array)-1, 0 , -1) 结果是从高到低的序列, 所以循环刚开始的 i 值最大, 第一次循环执行完会确定array的最大值, 类推, 第二次循环执行会确定array的 倒数第二大….循环执行完就确定了倒数第二大的值. 剩下的最后一个值就是最小的. 所以整个排序就完成了.

下面给大家打印一下代码的执行顺序,看完应该就明白了
这里先在代码中增加一些打印输出

#排序代码
for i in range(len(array)-1, 0, -1):
	print("************************************")
    print("对前 "+str(i+1) + " 位进行排序")
    for j in range(0, i):
        print("对第 " + str(j+1) + " 位和第 " +str(j+2) + " 位进行排序")
        if array[j] > array[j+1]:
            array[j], array[j+1] = array[j+1], array[j]
        print(array)

print("排序完结果:")
print(array)

执行结果如图

************************************
对前 11 位进行排序
对第 1 位和第 2 位进行排序
[3, 9, 5, 3, 2, 7, 6, 6, 0, 8, 1]
对第 2 位和第 3 位进行排序
[3, 5, 9, 3, 2, 7, 6, 6, 0, 8, 1]
对第 3 位和第 4 位进行排序
[3, 5, 3, 9, 2, 7, 6, 6, 0, 8, 1]
对第 4 位和第 5 位进行排序
[3, 5, 3, 2, 9, 7, 6, 6, 0, 8, 1]
对第 5 位和第 6 位进行排序
[3, 5, 3, 2, 7, 9, 6, 6, 0, 8, 1]
对第 6 位和第 7 位进行排序
[3, 5, 3, 2, 7, 6, 9, 6, 0, 8, 1]
对第 7 位和第 8 位进行排序
[3, 5, 3, 2, 7, 6, 6, 9, 0, 8, 1]
对第 8 位和第 9 位进行排序
[3, 5, 3, 2, 7, 6, 6, 0, 9, 8, 1]
对第 9 位和第 10 位进行排序
[3, 5, 3, 2, 7, 6, 6, 0, 8, 9, 1]
对第 10 位和第 11 位进行排序
[3, 5, 3, 2, 7, 6, 6, 0, 8, 1, 9]
************************************
对前 10 位进行排序
对第 1 位和第 2 位进行排序
[3, 5, 3, 2, 7, 6, 6, 0, 8, 1, 9]
对第 2 位和第 3 位进行排序
[3, 3, 5, 2, 7, 6, 6, 0, 8, 1, 9]
对第 3 位和第 4 位进行排序
[3, 3, 2, 5, 7, 6, 6, 0, 8, 1, 9]
对第 4 位和第 5 位进行排序
[3, 3, 2, 5, 7, 6, 6, 0, 8, 1, 9]
对第 5 位和第 6 位进行排序
[3, 3, 2, 5, 6, 7, 6, 0, 8, 1, 9]
对第 6 位和第 7 位进行排序
[3, 3, 2, 5, 6, 6, 7, 0, 8, 1, 9]
对第 7 位和第 8 位进行排序
[3, 3, 2, 5, 6, 6, 0, 7, 8, 1, 9]
对第 8 位和第 9 位进行排序
[3, 3, 2, 5, 6, 6, 0, 7, 8, 1, 9]
对第 9 位和第 10 位进行排序
[3, 3, 2, 5, 6, 6, 0, 7, 1, 8, 9]
************************************
对前 9 位进行排序
对第 1 位和第 2 位进行排序
[3, 3, 2, 5, 6, 6, 0, 7, 1, 8, 9]
对第 2 位和第 3 位进行排序
[3, 2, 3, 5, 6, 6, 0, 7, 1, 8, 9]
对第 3 位和第 4 位进行排序
[3, 2, 3, 5, 6, 6, 0, 7, 1, 8, 9]
对第 4 位和第 5 位进行排序
[3, 2, 3, 5, 6, 6, 0, 7, 1, 8, 9]
对第 5 位和第 6 位进行排序
[3, 2, 3, 5, 6, 6, 0, 7, 1, 8, 9]
对第 6 位和第 7 位进行排序
[3, 2, 3, 5, 6, 0, 6, 7, 1, 8, 9]
对第 7 位和第 8 位进行排序
[3, 2, 3, 5, 6, 0, 6, 7, 1, 8, 9]
对第 8 位和第 9 位进行排序
[3, 2, 3, 5, 6, 0, 6, 1, 7, 8, 9]
************************************
对前 8 位进行排序
对第 1 位和第 2 位进行排序
[2, 3, 3, 5, 6, 0, 6, 1, 7, 8, 9]
对第 2 位和第 3 位进行排序
[2, 3, 3, 5, 6, 0, 6, 1, 7, 8, 9]
对第 3 位和第 4 位进行排序
[2, 3, 3, 5, 6, 0, 6, 1, 7, 8, 9]
对第 4 位和第 5 位进行排序
[2, 3, 3, 5, 6, 0, 6, 1, 7, 8, 9]
对第 5 位和第 6 位进行排序
[2, 3, 3, 5, 0, 6, 6, 1, 7, 8, 9]
对第 6 位和第 7 位进行排序
[2, 3, 3, 5, 0, 6, 6, 1, 7, 8, 9]
对第 7 位和第 8 位进行排序
[2, 3, 3, 5, 0, 6, 1, 6, 7, 8, 9]
************************************
对前 7 位进行排序
对第 1 位和第 2 位进行排序
[2, 3, 3, 5, 0, 6, 1, 6, 7, 8, 9]
对第 2 位和第 3 位进行排序
[2, 3, 3, 5, 0, 6, 1, 6, 7, 8, 9]
对第 3 位和第 4 位进行排序
[2, 3, 3, 5, 0, 6, 1, 6, 7, 8, 9]
对第 4 位和第 5 位进行排序
[2, 3, 3, 0, 5, 6, 1, 6, 7, 8, 9]
对第 5 位和第 6 位进行排序
[2, 3, 3, 0, 5, 6, 1, 6, 7, 8, 9]
对第 6 位和第 7 位进行排序
[2, 3, 3, 0, 5, 1, 6, 6, 7, 8, 9]
************************************
对前 6 位进行排序
对第 1 位和第 2 位进行排序
[2, 3, 3, 0, 5, 1, 6, 6, 7, 8, 9]
对第 2 位和第 3 位进行排序
[2, 3, 3, 0, 5, 1, 6, 6, 7, 8, 9]
对第 3 位和第 4 位进行排序
[2, 3, 0, 3, 5, 1, 6, 6, 7, 8, 9]
对第 4 位和第 5 位进行排序
[2, 3, 0, 3, 5, 1, 6, 6, 7, 8, 9]
对第 5 位和第 6 位进行排序
[2, 3, 0, 3, 1, 5, 6, 6, 7, 8, 9]
************************************
对前 5 位进行排序
对第 1 位和第 2 位进行排序
[2, 3, 0, 3, 1, 5, 6, 6, 7, 8, 9]
对第 2 位和第 3 位进行排序
[2, 0, 3, 3, 1, 5, 6, 6, 7, 8, 9]
对第 3 位和第 4 位进行排序
[2, 0, 3, 3, 1, 5, 6, 6, 7, 8, 9]
对第 4 位和第 5 位进行排序
[2, 0, 3, 1, 3, 5, 6, 6, 7, 8, 9]
************************************
对前 4 位进行排序
对第 1 位和第 2 位进行排序
[0, 2, 3, 1, 3, 5, 6, 6, 7, 8, 9]
对第 2 位和第 3 位进行排序
[0, 2, 3, 1, 3, 5, 6, 6, 7, 8, 9]
对第 3 位和第 4 位进行排序
[0, 2, 1, 3, 3, 5, 6, 6, 7, 8, 9]
************************************
对前 3 位进行排序
对第 1 位和第 2 位进行排序
[0, 2, 1, 3, 3, 5, 6, 6, 7, 8, 9]
对第 2 位和第 3 位进行排序
[0, 1, 2, 3, 3, 5, 6, 6, 7, 8, 9]
************************************
对前 2 位进行排序
对第 1 位和第 2 位进行排序
[0, 1, 2, 3, 3, 5, 6, 6, 7, 8, 9]
排序完结果:
[0, 1, 2, 3, 3, 5, 6, 6, 7, 8, 9]

好啦,相信大家看这个图 也一定能够看明白了.
多写多想才能进步,大家一起加油!!!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值