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. 小朋友排队买零食¶
- 老师说按身高排队
- 每个小朋友都和旁边的比一比
- 个子高的就往后站一站
- 最后就能按身高从矮到高排好队啦!
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. 小贴士¶
- 记住冒泡排序的关键点:
- 总是比较相邻的两个数
- 大的数字往右移
-
每一轮都会把一个最大的数字放到右边
-
练习方法:
- 先用少量的数字练习(5-6个数字)
- 可以用扑克牌实际操作一遍
-
在纸上画出每一步的变化
-
进阶学习:
- 试试用不同的数字测试你的程序
- 想想如何让程序更快一些
- 和其他排序方法比较一下
记住:学习编程就像学习整理房间,从最简单的开始,慢慢就会变得得心应手啦!
进一步学习¶
冒泡排序 (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
算法特点¶
- 时间复杂度:O(n²)
- 空间复杂度:O(1)
- 稳定性:稳定
- 原地排序:是
适用场景¶
- 数据量较小
- 数据基本有序
- 空间资源紧张