用python实现冒泡排序

一、冒泡排序

我会用更通俗的话将冒泡排序的思路解释出来。对于无序的一组数,冒泡排序就是从左到右,相邻的两个数依次比较大小,如果左边大于右边,左右两边的数字交换位置。否则,跳过这个数,从下一位置接着比较。
每一趟冒泡排序都会有一个最大的数被交换到最后的位置,直到所有的数都成了从小到大排列,则排序结束。时间复杂度为O(n²)。

二、一趟冒泡排序

冒泡排序该怎么用具体编码实现呢?首先,先写出第一趟的排序过程。具体看代码:

1、具体代码

list1 = [12,9,25,37,21,43,19]

#指针i开始指向第一个元素list1[0]
#最后指向的是倒数第二个元素list[len(list1)-2],因为i要和i+1进行比较
for i in range(0,len(list1)-1):
    if list1[i] > list1[i+1]:
        #用python交换两数确实很方便
        list1[i],list1[i+1] = list1[i+1],list1[i]

print(list1)

2、运行结果

在这里插入图片描述
通过第一趟冒泡排序,最大的数43已经被交换到最末尾了。下一趟冒泡排序就是要把次大的数37交换到倒数第二的位置…以此类推。

三、冒泡排序完整代码

完整版的冒泡排序与一趟版的区别是:完整版每趟排序的时候,不需要对末尾已经排好序的数字再进行比较。
因此,完整版需要两层for循环嵌套就可以实现了。要注意循环的范围该怎么设置。

1、完整代码

list1 = [12,9,25,37,21,43,19]

for j in range(len(list1)-1,0,-1): #外层循环以-1的步长循环
    for i in range(0,j): #内层循环的范围就可以改为j
        if list1[i] > list1[i+1]:
            list1[i],list1[i+1] = list1[i+1],list1[i]
print(list1)

2、学习技巧

冒泡排序的编码就终于实现了,但是单看运行结果也看不出来所以然。这里小赵同学教给大家一个小技巧,把最后的输出语句放到内层循环里,这样你就能看到所有数据是怎么交换的了。再者,把最后的输出语句放到外层循环里,这样你就能看到每一趟冒泡排序的结果了。在这里,小赵同学给大家演示一下:

(1)内层循环

list1 = [12,9,25,37,21,43,19]

for j in range(len(list1)-1,0,-1): #外层循环以-1的步长循环
    for i in range(0,j): #内层循环的范围就可以改为j
        if list1[i] > list1[i+1]:
            list1[i],list1[i+1] = list1[i+1],list1[i]
            print(list1) #输出语句在内层循环

(2)输出结果

在这里插入图片描述

(3)外层循环

list1 = [12,9,25,37,21,43,19]

for j in range(len(list1)-1,0,-1): #外层循环以-1的步长循环
    for i in range(0,j): #内层循环的范围就可以改为j
        if list1[i] > list1[i+1]:
            list1[i],list1[i+1] = list1[i+1],list1[i]
    print(list1) #输出语句在外层循环

(4)运行结果

在这里插入图片描述

四、总结

以上就是关于冒泡排序的全部内容了大家如果有什么不明白的地方,可以找小赵同学交流讨论哦~~

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小赵同学-

非常感谢你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值