Python算法之选择排序

点击上方"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哥用了新的留言方式,欢迎点击下方小程序留言

推荐阅读:

Python爬取微信,我发现了之前没发现的秘密!

Python爬虫下载喜马拉雅音频文件

一行Python代码搞定快速排序算法

详解Python算法之冒泡排序

大量 IT 资源免费送,包括但不限于 Python、Java、人工智能、PMP,等等,在公众号内回复「1024」可免费获取。

本公众号的全部文章以整理成目录,后台回复「目录」可查看所有文章。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值