冒泡排序(Bubble Sort)

1 概述

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小或越大的元素会经由交换慢慢“浮”出

2 算法流程

  1. 相邻元素比较,升序排列则较大的数放后面,降序排列则较小的数放后面
  2. 完成一次遍历就能确定出所有未排序元素的最大值或最小值,放在最后,是为冒泡
  3. 算法通过嵌套的两层循环完成所有元素的冒泡
    (1)第1次遍历前n-1个数(遍历的数和其下一个相邻数比较,所以遍历次数少1),冒泡最大或最小的数
    (2)第2次遍历前n-2个数(第1步确定的最大/最小的数不再需要比较,所以遍历次数比第一次遍历少1),冒泡第2大/小的数
    (3)第3次遍历前n-3个数,冒泡第3大/小的数
    ……

3 代码/Python

def BubbleSort(nums):
    n = len(nums)
    # 第一层循环,遍历前n-1个数
    for i in range(n-1): 
        # 第二层循环,遍历前n-i-1个数
        for j in range(n-i-1):
            # 相邻数比较,大的放后面
            if nums[j] > nums[j+1]: 
                nums[j], nums[j+1] = nums[j+1], nums[j] 
    return nums

# 算法调用
import random
nums = [random.randint(0,100) for i in range(10)]

print('随机生成10个数字:', nums)
print('排序后输出结果为:', BubbleSort(nums))

4 算法解释

  • 冒泡算法是典型的比较排序法,思路比较简单
  • 时间复杂度:采用两层循环,所以时间复杂度为 O ( n 2 ) O(n^2) O(n2);最好情况是遍历一次,而没有进行任何交换,说明原本的数列就是有序的,因此最好情况的时间复杂度为 O ( n ) O(n) O(n);最坏情况就是每次遍历都需要交换,时间复杂度为 O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度:由于只是进行交换操作,不额外开辟内存,所以空间复杂度是 O ( 1 ) O(1) O(1)
  • 稳定性:比较相邻元素过程中,相等的元素不会交换,相对位置也不会发生变化,所以算法是稳定的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值