python冒泡排序

假设有一个数组arr = [6, 4, 3, 1, 2]需要按从小到大的顺序排序,用眼睛一眼就看出来怎么排了,用程序该如何实现呢

冒泡排序的规则:

1 相邻两个数比较,若前面的数大小后面的数,交换位置

2 再按1的规则进行排序,直到所有数都排好序为止

使用程序来模拟前面的规则,为了便于理解,我们先用数据来实际模拟一遍

原始数据集:6, 4, 3, 1, 2

第一轮结果:4, 3, 1, 2, 6

第二轮结果:3, 1, 2, 4, 6

第三轮结果:1, 2, 3, 4, 6

第四轮结果:1, 2, 3, 4, 6

详细说明

第一轮排序:6>4交换位置,变成4,6, 6>3交换位置变成3, 6, 6>1,交换位置变成1, 6, 6>2,交换位置变成2, 6, 第一轮排序完成,最终最大数6稳定在最后位置

第二轮排序:4>3交换位置,变成3,4,4>1交换位置变成1,4,4>2,交换位置变成2,4,最终剩下的最大数4稳定在倒数第二位置

第三轮排序:3>1交换位置,变成1, 3, 3>2交换位置变成2,3,最终剩下的最大数3稳定在倒数第三位置

第四轮排序:1<2,不变,2稳定在倒数第四位置

第五轮排序:只剩下1,1稳定在倒数第五位置

程序模拟:

我们可以用程序模拟每一轮的排序过程:

def sort_once(arr, index):
    for i in range(len(arr)-1-index):
        print(arr[i], arr[i+1])
        if arr[i] > arr[i+1]:
            arr[i], arr[i+1] = exchange(arr[i], arr[i+1])
    print(arr)

说明: 可以每一轮都将相邻的数进行比较,则对于5个数的排序,应该是5-1次比较,第一轮是比较4次,第二轮则是3次,看起来是每多一轮就多减1,我们可以设置个参数index,每次多出来的就减index即可

每一轮排序完成,我们可以把5轮都做一下:

for i in range(len(arr)):
    sort_once(arr, i)

程序优化

观察当一轮排序中没有发生交换数据的时候,此时所有的数已经排序好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

永远的麦田

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值