增强版冒泡排序

前言

  • 假设传入的列表为[4,3,2,1,40 50 60 ],列表后面的三个元素根本不需要排序
  • 再假设传入的列表为[1234567],此列表本身就是有序列表



冒泡排序普通写法

def sort_list(list1):
    for i in range(len(list1) - 1):
        for j in range(len(list1) - 1 - i):
            if list1[j] > list1[j + 1]:
                list1[j], list1[j + 1] = list1[j + 1], list1[j]
                print(list1)
    return list1

那么普通的冒泡排序写法就会稍显不足,因为不管你传入的列表是否有序,它for循环的次数以及里面的判断都不会减少



优化写法

def sort_list(name_list):
    for i in range(len(name_list) - 1):
        a = True    # 定义变量a,来确认是否还需要排序
        for j in range(len(name_list) - 1 - i):
            if name_list[j] > name_list[j + 1]:
                name_list[j], name_list[j + 1] = name_list[j + 1], name_list[j]
                a = False
        if a:   # 进入内层的for循环都没有改变a的值,说明已经不需要排序了
            break
    return name_list




演示

  • 加一点输出语句方便查看效果
def sort_list(name_list):
    for i in range(len(name_list) - 1):
        a = True    # 定义变量a,来确认是否还需要排序
        for j in range(len(name_list) - 1 - i):
            print(f"i的值:{i}  j的值:{j}")
            print(f"{name_list[j]} 比较 {name_list[j + 1]}", end="\t")
            if name_list[j] > name_list[j + 1]:
                print("进行交换")
                name_list[j], name_list[j + 1] = name_list[j + 1], name_list[j]
                print(f"交换后的列表:  {name_list}")
                a = False    # 交换了,就改变a的值
            else:
                print()
        print("------------------------------------------------")
        if a:   # 进入内层的for循环都没有改变a的值,说明已经不需要排序了
            break
    return name_list



传入 [1,2,3,4,5,6,7]

在这里插入图片描述

输出

在这里插入图片描述

传入 [3,2,1,40,50,60]

在这里插入图片描述

输出

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值