python实现冒泡排序,代码详解!

还是老规矩,先上代码:

arr = [4,6,3,5,2,1]
def bubble_sort(arr):
    n = len(arr) # 获取arr数组的长度
    for j in range(0,n-1): # range() 函数可创建一个整数列表,一般用在 for 循环中。
        print('j=',j)
        for i in range(0,n-1-j): #
            print('i=',i)
            if arr[i]>arr[i+1]:
                arr[i],arr[i+1] = arr[i+1],arr[i]
                print('第',i+1,'次排序结果',arr)
            else:
                print('第',i+1,'次排序结果',arr)

        print('-------------------------------------')

bubble_sort(arr)

代码中为了在控制台输出结果方便解释,用了很多的print。

-------------------------------------------------------------------------------------

第二个for循环

那么,开始吧。我们可以看到代码中有2个for循环,相信不少人难以理解为什么要用2个for循环?他们各自的作用又是什么呢?

上面可以看到在j=0,i=0到4的循环过程中,数值6一路向西,排到最后面。因为6已经和数组中所有数值比较过,所以可以确定在这次循环中,6是最大的没错。 

那么,数值 6 已经排好序。在下一轮第二个for循环中,不再理会arr[4].

这也是为什么第二个for循环中有“n-1-j”。

因为当第二个for循环完成,数值6排好,此时的j=1。于是n-1-j=n-1-1,导致第二个for循环的长度从0~4减少至0~3。无法触及排好的数值 6 ,这正是我们想要的。

-----------------------------------------------------------------------------------

第一个for循环

其实理解了上面的内容,你就会明白,第一个for循环其实是用来控制下一轮的第二个for循环长度-1,因为每次第二个for循环结束,j 都会+1,也就是说第二个for循环中的 n-1-j 会越来越小。

但是,还是来看看效果如何。

------------------------------------------------------------------------------------

最后排好的结果

 第一个for循环长度是0~4,当第一个for循环结束时,我们也就可以得到排好的数组了。

-------------------------------------------------------------------------------------

夹带私货

python有自带的排序函数:sort()

A = [11, 2, 5, 82, 7, 0, 4, 89, 72, 42]
A.sort()
print(A)

 

python牛逼!!!

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值