冒泡排序python

冒泡排序

概念

从左到右不断交换相邻逆序的元素,在一轮的循环后,可以让未排序的最大(或最小)元素在最右侧。在一轮循环后,如果没有发生交换,那么已经是有序的,可以直接退出了。

基本的代码实现

lista = [34,19,20,30,10,5,88,9]
#循环次数
for i in range(len(lista)-1):
    #注意j值的越界问题
    for j in range(len(lista)-1):
        #如果前一个数大于后一个数,交换两数位置
        if lista[j]>lista[j+1]:
            lista[j],lista[j+1]=lista[j+1],lista[j]
        else:
            pass
print(lista)

推理过程

第一轮
[34,19,20,30,10,5,88,9]
[19,34,20,30,10,5,88,9]----------如果第一个数大于第二数,交换两数位置
[19,20,34,30,10,5,88,9]----------如果第二个数大于第三数,交换两数位置
[19,20,30,34,10,5,88,9]----------第三数大于第四数,交换两数位置
[19,20,30,10,34,5,88,9]
[19,20,30,10,5,34,88,9]
[19,20,30,10,5,34,88,9]
[19,20,30,10,5,34,9,88]------------第一轮交换结束
进行第二轮,进行比较。进行指定的轮数后,排序结束,退出程序

时间复杂度

O(n^2)

变种的代码实现

lista = [34,19,20,30,10,5,88,9]
for i in range(len(lista)-1):
    for j in range(i+1,len(lista)):
        #第i个元素跟其后的元素进行比较,如果大于,交换两数位置
        if lista[i]>lista[j]:
            lista[i],lista[j]=lista[j],lista[i]
        else:
            pass
print(lista)

推理过程

第一轮
[34,19,20,30,10,5,88,9]--------第一元素与第二元素进行比较 交换位置
[19,34,20,30,10,5,88,9]---------第一元素与第三元素进行比较 不变
[19,34,20,30,10,5,88,9]----------第一元素与第四元素进行比较 不变
[10,34,20,30,19,5,88,9]---------第一元素与第五元素进行比较 交换位置
[5,34,20,30,19,10,88,9]---------第一元素与第六元素进行比较 交换位置
[5,34,20,30,19,10,88,9]---------第一元素与第七元素进行比较 不变
[5,34,20,30,19,10,88,9]---------第一元素与第八元素进行比较 不变
第一轮结束,开始第二轮
第二元素继续与其后元素继续比较。以此类推,直到代码的完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值