冒泡排序实验笔记:从轮次优化到边界控制

举报
yd_275421147 发表于 2026/11/02 19:21:41 2026/11/02
【摘要】 冒泡排序实验笔记:从轮次优化到边界控制今天在华为云 KooLabs 完成了“Python3 冒泡排序”云实验,把一个基础算法重新过了一遍,过程中有三点体会特别适合记录下来。 1. 冒泡排序的核心是“相邻比较 + 逐轮沉淀”每一轮从左到右比较相邻元素,较大的值不断向后交换;每一轮结束后,当前未排序区间的最大值会落到右端。因此,如果列表长度是 n,最多需要 n-1 轮。def bubble_so...

冒泡排序实验笔记:从轮次优化到边界控制

今天在华为云 KooLabs 完成了“Python3 冒泡排序”云实验,把一个基础算法重新过了一遍,过程中有三点体会特别适合记录下来。

1. 冒泡排序的核心是“相邻比较 + 逐轮沉淀”

每一轮从左到右比较相邻元素,较大的值不断向后交换;每一轮结束后,当前未排序区间的最大值会落到右端。因此,如果列表长度是 n,最多需要 n-1 轮。

def bubble_sort_basic(nums):
    n = len(nums)
    for i in range(n - 1):
        for j in range(n - 1 - i):
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
    return nums

2. 提前退出比“完整跑完”更重要

如果某一轮没有发生任何交换,说明序列已经有序,后面的轮次都可以跳过。用一个 swapped 标记记录本轮状态,可以把接近有序数据的复杂度从固定 O(n²) 降到最好情况的 O(n)。

def bubble_sort_optimized(nums):
    n = len(nums)
    for i in range(n - 1):
        swapped = False
        for j in range(n - 1 - i):
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
                swapped = True
        if not swapped:
            break
    return nums

3. 云实验里的验证方法

实验时不要只验证一个样例。可以分别准备:

  • 已经有序的列表:验证提前退出逻辑;
  • 逆序列表:观察最大交换次数;
  • 含重复值的列表:确认稳定排序的特性;
  • 空列表和单元素列表:检查边界条件。

华为云实验环境的好处是可以直接在浏览器里运行和查看输出,不用先花时间搭建本地 Python 环境。对初学者来说,边看实验指引边改代码,比只看理论更容易理解轮次边界为什么写成 n - 1 - i。

总结一句:冒泡排序虽然是入门算法,但它的优化思路很有代表性——先写出正确版本,再根据实际运行状态减少无效比较。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。