点击上方"brucepk",选择"置顶公众号"
第一时间关注 Python 技术干货!
阅读文本大概需要 3 分钟。
今天是 1024 程序员节,祝各位程序员朋友不用加班写代码,早日完成自己的梦想。今天本文用了新的留言方式,大家可在文章末尾尝鲜留言。
今天给大家分享的是 Python 算法中的选择排序。选择排序是一种简单直观的排序算法。和之前讲到的冒泡排序、快速排序性质一样,都是属于比较法排序。
排序原理
它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
排序思路
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第 n-1 个元素,第 n 个元素不用选择了,因为只剩下它一个最大的元素了。
动态效果图
为了便于理解,例子中的列表我只用了 4 个元素,利用双层 for 循环完成排序,内层 for 循环做判断和基准数字比较大小,比基准数字小的就交换位置,直到选择出最小的放在第一位,然后再从剩下的数字中继续判断,选择出第二小的,以此类推。(左右滑动查看全部代码)
def selection_sort(list):
for i in range(0, len(list)-1):
min_ = i
for j in range(i + 1, len(list)):
if list[j] < list[min_]:
min_ = j
list[i], list[min_] = list[min_], list[i] # 双方交换位置
print(list)
list = [8, 4, 11, 6]
selection_sort(list)
代码分析
为了便于理解,我在代码中把每次内外层循环时的列表打印出来。(左右滑动查看全部代码)
def selection_sort(list):
for i in range(0, len(list)-1):
min_ = i
print(list)
for j in range(i + 1, len(list)):
if list[j] < list[min_]:
min_ = j
list[i], list[min_] = list[min_], list[i] # swap
print(list)
print('\n')
list = [8, 4, 11, 6]
selection_sort(list)
打印出来的结果如下
[8, 4, 11, 6]
[4, 8, 11, 6]
[4, 8, 11, 6]
[4, 6, 11, 8]
[4, 6, 11, 8]
[4, 6, 8, 11]
从第一组数可以看出,i 经过第一轮的循环后,把列表中最小的数字 4 提取了出来并和之前的第一位的数字 8 交换了位置。第一个最小的数字排好序后,接下来 i 继续往后循环,在后面三个数中最小的 6 交换到第二位。i 第三次循环时比较最后两个数字的大小,把相对小的排在第三位,最后一位不用排,自然就是最大的数字了。
以上的例子是把数字从小到大升序排列,如果需要从大到小降序排列呢?只需要把代码中 if 判断语句中的 < 符号改成 > 符号即可。
今天的 Python 算法选择排序比较简单,希望能帮助大家更好地理解。
「pk哥」以梦为马,不负韶华
长按识别二维码关注
觉得不错,点赞、赞赏、转发朋友圈都是一种支持。
pk哥用了新的留言方式,欢迎点击下方小程序留言。
推荐阅读:
大量 IT 资源免费送,包括但不限于 Python、Java、人工智能、PMP,等等,在公众号内回复「1024」可免费获取。
本公众号的全部文章以整理成目录,后台回复「目录」可查看所有文章。