冒泡排序

冒泡排序应该算是排序算法中最简单的一个了。它会进行多轮排序,每一轮排序会比较相邻元素的大小,然后根据需求交换相邻元素。冒泡排序是一个稳定的排序,这里稳定的意思是两个大小相同的数字在排序前后,它们之间的相对位置不变。因为当两个元素相等时,冒泡排序不会采取任何措施,所以不会改变相等元素之间的相对位置。

下面是对序列[1, 4, 3, 2]排序的例子:

第1轮:
[1, 4, 3, 2]
[1, 3, 4, 2]
[1, 3, 2, 4]
第2轮:
[1, 3, 2, 4]
[1, 2, 3, 4]
第3轮:
[1, 2, 3, 4]

下面是网上的一个动态案例,很生动形象(https://www.jianshu.com/p/1458abf81adf

下面就直接上python代码了:

def bubble(array):
    length = len(array)-1
    ## 进行多轮排序,直到未被排序的元素长度为0
    while length > 0: 
        ## 中途已经完成排序
        flag = 0
        ## 一轮排序
        for i in range(length):
            if array[i] > array[i+1]:
                array[i], array[i+1] = array[i+1], array[i]
                flag = 1
        if flag == 0:
            return array
        length -= 1
    return array

一轮排序后,序列里面最大的元素肯定就在序列的最右边,所以我们再对序列左边未排序的元素进行排序。就这样重复一轮排序,直到左边未排序的元素为0. 这里设置了一个flag,当序列已经提前完成排序时,就跳出while循环。因为只要序列已经完成排序了,在进行下一轮排序时就不会有相邻两个元素交换的情况发生,此时说明序列已经提前完成排序,不需要再继续进行了。

上面讲的是从小到大的排序,如果是从大到小的排序,最右边的元素就是最小的元素。

冒泡排序的时间复杂度为O(n^2)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值