简单排序算法
排序是计算机科学中最基础也是最重要的算法之一。今天我们将学习最简单的排序方法——通过两两比较四个数字来将它们从小到大排序。
排序的核心思想
- 两两比较相邻的数字
- 如果前面的数字比后面的大,就交换它们的位置
- 重复这个过程,直到所有数字都按顺序排列
- 这个方法就像冒泡一样,较大的数字会逐渐"浮"到右边
排序步骤详解
四个数排序的步骤
- 比较第一个和第二个数,如果第一个 > 第二个,交换它们
- 比较第二个和第三个数,如果第二个 > 第三个,交换它们
- 比较第三个和第四个数,如果第三个 > 第四个,交换它们
- 比较第一个和第二个数,如果第一个 > 第二个,交换它们
- 比较第二个和第三个数,如果第二个 > 第三个,交换它们
- 比较第一个和第二个数,如果第一个 > 第二个,交换它们
经过这六个步骤,四个数就会从小到大排列好!
初始状态
8
3
5
1
我们的目标是将这些数字从小到大排序:1, 3, 5, 8
第一轮比较(第1-3步)
8
3
5
1
比较 8 和 3 → 8 > 3 → 交换它们
3
8
5
1
比较 8 和 5 → 8 > 5 → 交换它们
3
5
8
1
比较 8 和 1 → 8 > 1 → 交换它们
3
5
1
8
第一轮结束:最大的数字8已经移动到最后
第二轮比较(第4-5步)
3
5
1
8
比较 3 和 5 → 3 < 5 → 不交换
3
5
1
8
比较 5 和 1 → 5 > 1 → 交换它们
3
1
5
8
第二轮结束:第二大的数字5也排好位置
第三轮比较(第6步)
3
1
5
8
比较 3 和 1 → 3 > 1 → 交换它们
1
3
5
8
第三轮结束:所有数字从小到大排列完成!
Python实现代码
# 四个数简单排序
def simple_sort(a, b, c, d):
# 第一轮比较
if a > b:
a, b = b, a # 交换 a 和 b
if b > c:
b, c = c, b # 交换 b 和 c
if c > d:
c, d = d, c # 交换 c 和 d
# 第二轮比较
if a > b:
a, b = b, a # 交换 a 和 b
if b > c:
b, c = c, b # 交换 b 和 c
# 第三轮比较
if a > b:
a, b = b, a # 交换 a 和 b
# 返回排序结果
return a, b, c, d
# 测试排序函数
numbers = (8, 3, 5, 1)
sorted_numbers = simple_sort(*numbers)
print("排序前:", numbers)
print("排序后:", sorted_numbers)
# 输出:
# 排序前: (8, 3, 5, 1)
# 排序后: (1, 3, 5, 8)
def simple_sort(a, b, c, d):
# 第一轮比较
if a > b:
a, b = b, a # 交换 a 和 b
if b > c:
b, c = c, b # 交换 b 和 c
if c > d:
c, d = d, c # 交换 c 和 d
# 第二轮比较
if a > b:
a, b = b, a # 交换 a 和 b
if b > c:
b, c = c, b # 交换 b 和 c
# 第三轮比较
if a > b:
a, b = b, a # 交换 a 和 b
# 返回排序结果
return a, b, c, d
# 测试排序函数
numbers = (8, 3, 5, 1)
sorted_numbers = simple_sort(*numbers)
print("排序前:", numbers)
print("排序后:", sorted_numbers)
# 输出:
# 排序前: (8, 3, 5, 1)
# 排序后: (1, 3, 5, 8)
尝试自己排序
输入四个数字,观察它们如何通过两两比较排序:
?
?
?
?
排序记忆游戏
你能记住排序步骤吗?
点击卡片查看排序步骤,然后尝试按顺序排列它们:
比较1和2
比较2和3
比较3和4
比较1和2
比较2和3
比较1和2
排序完成
交换数字
思考题
- 为什么需要三轮的比较?两轮够吗?
- 如果四个数字已经排好序了,算法还会交换数字吗?
- 如何修改代码,让数字从大到小排序?
- 如果要排序五个数字,需要多少轮比较?
排序算法总结
| 排序方法 | 比较次数 | 交换次数 | 特点 |
|---|---|---|---|
| 四个数两两比较 | 6次 | 最多6次 | 最简单直观,适合少量数据 |
| 冒泡排序 | 6次 | 最多6次 | 类似方法,但通常使用循环实现 |
| 选择排序 | 6次 | 最多3次 | 每次找出最小元素放到前面 |
| 插入排序 | 6次 | 最多6次 | 逐个将元素插入到合适位置 |
排序小技巧
- 排序前先把数字写下来,方便比较和交换
- 使用不同颜色的笔或者标记来跟踪当前比较的数字
- 使用Python的print()语句在每一步输出当前状态
- 尝试用手势模拟数字交换,可以帮助理解