算法之冒泡排序

什么是冒泡排序

冒泡排序是排序中经典排序之一,它利用相邻元素比较并进行位置的互换,让元素按照从小到大的顺序排列。


原理解释:

相邻的两个元素比较,如果如果元素1大于元素2则元素1与元素二的位置互换。怎么进行位置互换呢?把元素1先定义到额外的变量里面,让元素1与元素2进行互换,如果互换完成了。再把互换后的元素1也就是现在的元素2,重新定义回原来的变量,这样就实现了互换。
这里写图片描述


单元素比较

li = [11, 9, 10, 1]
for m in range(len(li)-1):    #确定循环的次数-1是因为从0开始的
    if li[m] > li[m+1]:    #相邻的元素比较
        temp = li[m+1]    
        li[m+1] = li[m]
        li[m] = temp
print(li)

冒泡排序的基本比较方式已经有了,现在进一步解析冒泡排序的原理

需求:
将所有元素按照从小到大的顺序排列

li = [11, 9, 10, 1]
for m in range(len(li)-1):
    if li[m] > li[m+1]:
        temp = li[m+1]
        li[m+1] = li[m]
        li[m] = temp

已经把最大的数字移动到最后个元素位了,下面把第二大的移动到倒数第二位元素

for m in range(len(li)-2):
    if li[m] > li[m+1]:
        temp = li[m+1]
        li[m+1] = li[m]
        li[m] = temp

依次类推,继续操作:

for m in range(len(li)-3):
    if li[m] > li[m+1]:
        temp = li[m+1]
        li[m+1] = li[m]
        li[m] = temp
for m in range(len(li)-3):
    if li[m] > li[m+1]:
        temp = li[m+1]
        li[m+1] = li[m]
        li[m] = temp
for m in range(len(li)-4):
    if li[m] > li[m+1]:
        temp = li[m+1]
        li[m+1] = li[m]
        li[m] = temp
print(li)

因为列表li的字符一共有4个元素,-3就已经到了最前面两个字符做比较了,这样就不用继续下去了。


上面繁琐重复的代码可以达到我们预期的效果,那么能不能运用for循环的方式,精简代码达到同样的目的呢?

li = [11, 9, 10, 1]
for m in range(1, len(li)):
    for i in range(len(li) - m):
        if li[i] > li[i + 1]:
            temp = li[i+1]
            li[i+1] = li[i]
            li[i] = temp
print(li)
[1, 9, 10, 11]

最终我们得到以上语句,到此冒泡排序就已经出来了。


注意:

  • len(li) 如果只查看位数的话,是占4位;如果进行for循环位数的话是用0开始循环。
  • 两个for循环的关系有点复杂,第一个for循环得出来的是li的位数,其实最重要的是第二个for循环,第二次for循环完成的时候,就已经完成了一次排序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值