Python之冒泡排序

本文通过拳击比赛的比喻解释冒泡排序原理,通过实际例子展示了冒泡排序的过程,最终用JAVA代码进行了实现。冒泡排序是一种简单的排序算法,通过不断交换相邻的错误位置的元素,使最大(或最小)的元素逐渐‘浮’到序列的一端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序(Bubble Sort): 随机得到一串数字,经过计算后最大的泡泡(数字)应该在上面,最小的泡泡(数字)在最后面
原理:比较像邻的两个数字,将大的数字放在前面,小的数字放在后面

我来打个比方:5个人来举办拳击比赛,这几个人的上场顺序是平均的,无疑肯定是实力最强的是第一名,实力最弱的是最后一名,如果1号上场的就是实力 最强的,那么久意味着这个人肯定就能呆在台下,而最弱的是第一个上场的话,他挑战其他几名选手肯定都是打不过的,所以说他肯定是要在最后的.下面我们开公布赛制规则
选手共有5个人 成龙,李连杰,李小龙,叶问,孙悟空

第一回合
第一场比赛:成龙 VS 李连杰 成龙胜
第二场比赛:李连杰 VS 李小龙 李小龙胜
第三场比赛:李连杰 VS 叶问 叶问胜
第四场比赛:李连杰 VS 孙悟空 孙悟空胜
当前比赛排名: 成龙 > 李小龙 > 叶问 > 孙悟空 >李连杰

第二回合
第一场比赛:成龙 VS 李小龙 李小龙龙胜
第二场比赛:成龙 VS 叶问 叶问胜
第三场比赛:成龙 VS 孙悟空 孙悟空胜
当前比赛排名:李小龙>叶问>孙悟空>成龙>李连杰
这场比赛为什么只打三场呢?因为成龙和李连杰打,李连杰已经输过了啊,嘻嘻

第三回合
第一场比赛:李小龙 VS 叶问 叶问胜
第二场比赛:李小龙 VS 孙悟空 孙悟空胜
当前比赛排名:叶问>孙悟空>李小龙>成龙>李连杰

总决赛:
总决赛:叶问 VS 孙悟空 孙悟空胜(因为孙悟空会72变)
当前比赛排名:孙悟空>叶问>李小龙>成龙>李连杰

下面我们来看代码:

#下面的列表里有遗传随机的数字
l = [3,5,8,4,6]

for c in l:
#这个就是第一次循环,也可以说是第一回合
print(l)          #用于打印每次循环的结果
    for i in range(0,(len(l)-1)-l.index(c)):
    #为什么(len(l)-1)-l.index(c)要这样写呢?
    #因为我们在上面的比武大赛中也看到了,如果我们比较一次之后就能确定一个人的名次,所以就少一场比赛,
        if l[i] < l[i+1]:
        ##python中的语法很便捷,比赛制度更加完善,我下面会贴出java中的冒泡排序的代码
              l[i], l[i+1] = l[i+1], l[i]
          

			    ##这个是打印出来的结果
					[8, 6, 5, 4, 3]
					[8, 6, 5, 4, 3]
					[8, 6, 5, 4, 3]
					[8, 6, 5, 4, 3]
					*
					[8, 6, 5, 4, 3]
					[8, 6, 5, 4, 3]
					[8, 6, 5, 4, 3]
					*
					[8, 6, 5, 4, 3]
					[8, 6, 5, 4, 3]
					*
					[8, 6, 5, 4, 3]

JAVA的代码展示:

l = [3,5,8,4,6]
for c in l:
    for i in range(0,(len(l)-1)-l.index(c)):
        if l[i] < l[i+1]:
                tepl = l[i]
                l[i] = l[i+1]
                l[i+1] = tepl
print(l)

##这个思想就是循环得出之后,要创建一个变量,先将输的位置的值放入到变量中,再将赢得值放入到输的位置上,
再将刚刚的变量放入赢得位置
C = A
A = B
B = C
这样A和B的值就交换了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值