跳转至

Python冒泡排序 - 小气泡向上游!

视频教程

1. 冒泡排序基础概念

2. 完整排序过程

3. 代码讲解

1. 冒泡排序是什么?让我们一起想象...

你有没有看过鱼缸里的气泡?小气泡总是一个接一个地往上冒,大气泡游得快,小气泡游得慢。冒泡排序就像这些气泡一样!

想象一下,你有一排数字:[5, 3, 8, 2, 1] - 第一步:比较相邻的两个数字,大的往右移(就像大气泡往上游) - 第二步:一直比较到最后,最大的数字就会跑到最右边 - 第三步:重复这个过程,直到所有数字都排好序

在这里看看气泡是怎么游动的!

2. 让我们玩个游戏!

2.1. 小朋友的排队游戏

想象你是一个小老师,要让同学们按身高排队: 1. 先看第一个和第二个同学,谁高谁站后面 2. 再看第二个和第三个同学,谁高谁站后面 3. 这样一直比下去,最高的同学就会排到最后啦!

2.2. 写个简单的程序

def bubble_sort(numbers):
    # 假设我们有一排数字
    for i in range(len(numbers)):
        # 每次都从第一个数字开始比较
        for j in range(len(numbers) - i - 1):
            # 如果左边的数字比右边的大,就交换位置
            if numbers[j] > numbers[j + 1]:
                numbers[j], numbers[j + 1] = numbers[j + 1], numbers[j]
    return numbers

# 试一试!
my_numbers = [5, 2, 8, 1, 9]
print("排序前:", my_numbers)
sorted_numbers = bubble_sort(my_numbers)
print("排序后:", sorted_numbers)

3. 让冒泡排序变得更快!

3.1. 小小改进

就像你整理玩具时,如果发现玩具已经摆好了,就不用再整理了。我们也可以让冒泡排序变得更聪明:

def smart_bubble_sort(numbers):
    for i in range(len(numbers)):
        # 记录这一轮有没有交换过位置
        did_swap = False

        for j in range(len(numbers) - i - 1):
            if numbers[j] > numbers[j + 1]:
                numbers[j], numbers[j + 1] = numbers[j + 1], numbers[j]
                did_swap = True

        # 如果没有交换过位置,说明已经排好序啦!
        if not did_swap:
            break

    return numbers

# 试试这个更聪明的方法
my_numbers = [1, 2, 3, 5, 4]  # 几乎排好序的数字
print("排序前:", my_numbers)
sorted_numbers = smart_bubble_sort(my_numbers)
print("排序后:", sorted_numbers)

4. 冒泡排序有什么特点?

4.1. 优点:

  • 超级容易理解,就像气泡往上冒一样简单!
  • 写起来很简单,代码很短
  • 不需要额外的空间,就在原地排序
  • 特别适合小朋友学习编程

4.2. 缺点:

  • 如果数字特别多,排序会比较慢
  • 要做很多次比较和交换
  • 不适合处理特别大的数据

5. 生活中的例子

5.1. 图书馆整理书籍

想象你在图书馆整理书架: 1. 看看第一本书和第二本书,把大的放右边 2. 再看第二本和第三本,把大的放右边 3. 这样一直比下去,最厚的书就会到最右边啦!

5.2. 小朋友排队买零食

  1. 老师说按身高排队
  2. 每个小朋友都和旁边的比一比
  3. 个子高的就往后站一站
  4. 最后就能按身高从矮到高排好队啦!

6. 趣味练习题

6.1. 小游戏:整理扑克牌

材料:一副扑克牌(只用数字卡) 1. 抽出5张牌 2. 试着用冒泡排序的方法把它们按大小排好 3. 数一数你交换了多少次?

6.2. 动手编程

# 完成下面的程序,实现冒泡排序
def my_first_bubble_sort(numbers):
    # 在这里写下你的代码
    # 提示:需要两个for循环
    # 提示:需要比较相邻的数字
    pass

# 测试你的程序
test_numbers = [4, 2, 7, 1, 3]
sorted_numbers = my_first_bubble_sort(test_numbers)
print("你的程序排序结果:", sorted_numbers)

7. 小贴士

  1. 记住冒泡排序的关键点
  2. 总是比较相邻的两个数
  3. 大的数字往右移
  4. 每一轮都会把一个最大的数字放到右边

  5. 练习方法

  6. 先用少量的数字练习(5-6个数字)
  7. 可以用扑克牌实际操作一遍
  8. 在纸上画出每一步的变化

  9. 进阶学习

  10. 试试用不同的数字测试你的程序
  11. 想想如何让程序更快一些
  12. 和其他排序方法比较一下

记住:学习编程就像学习整理房间,从最简单的开始,慢慢就会变得得心应手啦!

进一步学习


冒泡排序 (Bubble Sort)

算法介绍

冒泡排序是一种简单直观的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

完整演示

下面的视频展示了冒泡排序的完整过程:

代码实现

让我们来看看冒泡排序的Python代码实现:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        # 每次遍历,将最大的元素"冒泡"到末尾
        for j in range(0, n-i-1):
            # 比较相邻元素,如果前面的更大则交换
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

算法特点

  1. 时间复杂度:O(n²)
  2. 空间复杂度:O(1)
  3. 稳定性:稳定
  4. 原地排序:是

适用场景

  1. 数据量较小
  2. 数据基本有序
  3. 空间资源紧张