Python选择排序 - 找到最小的放在前面!¶
视频教程¶
1. 选择排序基础概念¶
2. 完整排序过程¶
3. 代码讲解¶
1. 选择排序是什么?让我们一起想象...¶
想象你在玩一个找小朋友的游戏!每次从一群小朋友中找出最矮的,让他站到队伍的最前面。然后再从剩下的小朋友中找出最矮的,让他站到第二个位置。就这样一直找下去,直到所有小朋友都排好队啦!
2. 让我们玩个游戏!¶
2.1. 找最小的游戏¶
想象你有一堆积木,每个积木上都写着数字: 1. 先找出最小的数字,放到第一个位置 2. 再从剩下的数字中找最小的,放到第二个位置 3. 一直这样找下去,直到所有数字都排好啦!
2.2. 写个简单的程序¶
def selection_sort(numbers):
# 遍历所有数字
for i in range(len(numbers)):
# 假设当前位置的数字最小
smallest_position = i
# 在剩下的数字中找真正的最小值
for j in range(i + 1, len(numbers)):
if numbers[j] < numbers[smallest_position]:
smallest_position = j
# 把最小的数字放到当前位置
numbers[i], numbers[smallest_position] = numbers[smallest_position], numbers[i]
return numbers
# 试一试!
my_numbers = [5, 2, 8, 1, 9]
print("排序前:", my_numbers)
sorted_numbers = selection_sort(my_numbers)
print("排序后:", sorted_numbers)
3. 让选择排序变得更有趣!¶
3.1. 找最大最小值¶
就像玩跷跷板一样,我们可以同时找最高和最矮的小朋友:
def fun_selection_sort(numbers):
left = 0
right = len(numbers) - 1
while left < right:
# 找最小和最大的数字
min_pos = left
max_pos = left
for i in range(left, right + 1):
if numbers[i] < numbers[min_pos]:
min_pos = i
if numbers[i] > numbers[max_pos]:
max_pos = i
# 把最小的放左边
numbers[left], numbers[min_pos] = numbers[min_pos], numbers[left]
# 如果最大的数在left位置,现在它被移动到了min_pos位置
if max_pos == left:
max_pos = min_pos
# 把最大的放右边
numbers[right], numbers[max_pos] = numbers[max_pos], numbers[right]
left += 1
right -= 1
return numbers
# 试试这个有趣的方法
my_numbers = [6, 2, 9, 1, 7, 3, 8]
print("排序前:", my_numbers)
sorted_numbers = fun_selection_sort(my_numbers)
print("排序后:", sorted_numbers)
4. 选择排序有什么特点?¶
4.1. 优点:¶
- 超级容易理解,就像找最矮的小朋友一样简单!
- 不用经常交换位置,比冒泡排序快一些
- 写起来很简单,代码很清楚
- 特别适合小朋友学习编程
4.2. 缺点:¶
- 如果数字特别多,找最小值会比较慢
- 每次都要看完所有剩下的数字
- 不适合处理特别大的数据
5. 生活中的例子¶
5.1. 整理玩具¶
想象你在整理一堆玩具小车: 1. 先找出最小的小车,放到第一个 2. 再找剩下的最小的,放到第二个 3. 这样一直找下去,直到所有小车都按大小排好啦!
5.2. 运动会排名¶
- 找出跑得最快的同学,给第一名
- 在剩下的同学中找最快的,给第二名
- 这样一直找下去,直到所有名次都排好啦!
6. 趣味练习题¶
6.1. 小游戏:找最小的数字¶
材料:5张卡片,每张写一个不同的数字 1. 把卡片随机排列 2. 试着用选择排序的方法把它们排好 3. 数一数你找了多少次最小的数?
6.2. 动手编程¶
# 完成下面的程序,实现选择排序
def my_first_selection_sort(numbers):
# 在这里写下你的代码
# 提示:需要两个for循环
# 提示:第一个循环决定当前位置
# 提示:第二个循环找最小的数
pass
# 测试你的程序
test_numbers = [4, 2, 7, 1, 3]
sorted_numbers = my_first_selection_sort(test_numbers)
print("你的程序排序结果:", sorted_numbers)
7. 小贴士¶
- 记住选择排序的关键点:
- 每次都找最小的数字
- 找到后放到正确的位置
-
不断缩小寻找范围
-
练习方法:
- 用积木或卡片实际操作一遍
- 画图表示每一步的变化
-
和小伙伴一起演示排序过程
-
进阶学习:
- 试试同时找最大和最小的数
- 比较和冒泡排序的不同
- 想想还有什么可以优化的地方
记住:选择排序就像找小朋友排队一样简单,慢慢练习就能掌握啦!
进一步学习¶
选择排序 (Selection Sort)¶
算法介绍¶
选择排序是一种简单直观的排序算法。它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
完整演示¶
下面的视频展示了选择排序的完整过程:
代码实现¶
让我们来看看选择排序的Python代码实现:
def selection_sort(arr):
n = len(arr)
for i in range(n):
# 找到未排序部分中最小元素的索引
min_idx = i
for j in range(i+1, n):
if arr[j] < arr[min_idx]:
min_idx = j
# 将找到的最小元素放到已排序序列的末尾
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
算法特点¶
- 时间复杂度:O(n²)
- 空间复杂度:O(1)
- 稳定性:不稳定
- 原地排序:是
适用场景¶
- 数据量较小
- 对稳定性没有要求
- 需要最小化交换操作的次数