python实现冒泡排序

冒泡排序:

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

简单的代码实现:

# 冒泡排序
arr=[1,56,88,22,21,3]
def bubble_sort(arr):
    n=len(arr)  #  获取到该列表的长度
    for i in range(n-1):  
        for j in range(n-1-i):
            if arr[j]>arr[j+1]:
                arr[j],arr[j+1]=arr[j+1],arr[j]
bubble_sort(arr)
print('输出结果为:',arr)
输出结果为: [1, 3, 21, 22, 56, 88]

排序思想:

冒泡排序一次比较两个元素,首先拿第一个与第二个做比较,如果第二比第一个大,便交换位置,重复次操作比较到最后一个,那么第一轮就完成了,效果就是最后一个元素是这个列表中最大的一个;接着在来一轮,同上,效果,倒数第二个元素大小是仅次于倒数第一个元素…

效果图

在这里插入图片描述

思考?

要是我们比较一次之后后面都是顺序了,但是我们还是继续进行比较的操作,有什么办法让我在知道后面是顺序之后,就不做接下去的比较了吗?

优化代码

#3.优化   如果内层循环一进去就是顺序的,那之后的外层循环都可以不用进行了的
arr=[1,56,88,21,21,3]
def bubble_sort2(arr):
    n=len(arr)  # 获取到列表的长度
    for i in range(n-1,0,-1):  
        for j in range(0,i):
            flag=True   # 设置一个flag  如果一次都没有进入换位置,就说名后面是顺序,直接退出内层循环
            if arr[j]>arr[j+1]:
                arr[j],arr[j+1]=arr[j+1],arr[j]
                flag=False
        if flag:
            return
bubble_sort2(arr)
print(arr)   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值