选择排序算法(Python实现,图文并茂)
选择排序是一种简单直观的排序算法。它的工作原理是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,所以称为选择排序。
选择排序算法的基本思想:先从序列的未排序区域中选择一个最小的元素,把它与序列中的第 1 个元素交换位置;再从剩下的未排序区域中选出一个最小的元素,把它与序列中的第 2 个元素交换位置……如此反复操作,直到序列中的所有元素按升序排列完毕。
例如,对无序表 [56,12,80,92,20] 采用选择排序算法进行排序,具体过程如下:
1) 第一次遍历时,从下标为 1 的位置即 56 开始,找出关键字值最小的记录 12,同下标为 0 的关键字 56 交换位置。
2) 第二次遍历时,从下标为 2 的位置即 56 开始,找出最小值 20,同下标为 2 的关键字 56 互换位置。
3) 第三次遍历时,从下标为 3 的位置即 80 开始,找出最小值 56,同下标为 3 的关键字 80 互换位置。
4) 第四次遍历时,从下标为 4 的位置即 91 开始,找出最小值 80,同下标为 4 的关键字 92 互换位置。
5) 至此简单选择排序算法完成,无序列变为有序表。
【实例】 利用选择排序算法对序列 [56,12,80,92,20] 进行排序。
实现步骤如下:
选择排序算法的基本思想:先从序列的未排序区域中选择一个最小的元素,把它与序列中的第 1 个元素交换位置;再从剩下的未排序区域中选出一个最小的元素,把它与序列中的第 2 个元素交换位置……如此反复操作,直到序列中的所有元素按升序排列完毕。
例如,对无序表 [56,12,80,92,20] 采用选择排序算法进行排序,具体过程如下:
1) 第一次遍历时,从下标为 1 的位置即 56 开始,找出关键字值最小的记录 12,同下标为 0 的关键字 56 交换位置。

2) 第二次遍历时,从下标为 2 的位置即 56 开始,找出最小值 20,同下标为 2 的关键字 56 互换位置。

3) 第三次遍历时,从下标为 3 的位置即 80 开始,找出最小值 56,同下标为 3 的关键字 80 互换位置。

4) 第四次遍历时,从下标为 4 的位置即 91 开始,找出最小值 80,同下标为 4 的关键字 92 互换位置。

5) 至此简单选择排序算法完成,无序列变为有序表。
【实例】 利用选择排序算法对序列 [56,12,80,92,20] 进行排序。
实现步骤如下:
- 步骤 1:找出序列中的最大值,然后跟最后一个元素交换位置。
- 步骤 2:循环执行步骤1。
- 步骤 3:优化函数并封装成函数。
# 步骤 1
lst = [56, 12, 80, 92, 20]
index = 0 # 定义一个存放最大值的索引值的变量,默认为 0
for i in range(len(lst) - 1):
if lst[i + 1] > lst[index]:
index = i + 1
# 结束完循环之后 index 为最大值的索引值
lst[index], lst[len(lst) - 1] = lst[len(lst) - 1], lst[index]
# 此时将最大值放到了列表最后
print(lst)
# [56, 12, 80, 20, 92]
# 步骤 2
lst = [56, 12, 80, 92, 20]
for i in range(len(lst) - 1): # 定义一个存放最大值的索引值的变量,默认为 0
index = 0
for j in range(len(lst) - 1 - i):
# 当循环第一次时,i = 0, 需要循环整个列表才能找出最大值
# 当循环第二次时,i = 1, 不需要循环最后一个元素,因为最后一个元素一定是最大的
# ...
if lst[j + 1] > lst[index]:
index = j + 1
# 结束完循环之后 index 为最大值的索引值,将最大值放置参加循环的最后一位
lst[index], lst[len(lst) - 1 - i] = lst[len(lst) - 1 - i], lst[index]
print(lst)
# [12, 20, 56, 80, 92]
# 步骤 3
def sort(lst):
n = len(lst)
for i in range(n - 1):
index = 0
for j in range(n - 1 - i):
if lst[j + 1] > lst[index]:
index = j + 1
lst[index], lst[n - 1 - i] = lst[n - 1 - i], lst[index]
return lst
lst = [56, 12, 80, 92, 20]
print(sort(lst))
# [12, 20, 56, 80, 92]
ICP备案:
公安联网备案: