千家信息网

如何使用python实现选择排序

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍如何使用python实现选择排序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!选择排序简单理解:以升序来说,在每次遍历待排序数组时,默认首位的元素为最小,然后逐
千家信息网最后更新 2025年01月23日如何使用python实现选择排序

这篇文章主要介绍如何使用python实现选择排序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

选择排序简单理解:以升序来说,在每次遍历待排序数组时,默认首位的元素为最小,然后逐个把剩余元素与该首位元素进行比较,如果小于则二者交换位置,这样遍历完一次数组,就能确定把最小的一个元素放到首位。每次遍历完数组时,均能确定一个相对最小元素,因此相对于上次遍历的数组来说,此次的数组长度减1,即已经确定为最小的元素不再参与后续的遍历,正常情况下经过原数组长度减1次遍历即可完成排序。
def selection_sort(alist):    '''选择排序'''        last = len(alist)    first = 1        while first < last:        print(first)  # 可以理解为第几次遍历        for i in range(first,last):            if alist[i] < alist[first-1]: # 从小到大排列                alist[first-1],alist[i] = alist[i],alist[first-1]        print(alist)   # 每次遍历完的结果                first += 1
return alist

if __name__ == '__main__': alist = [2,4,7,1,6,5,3] print(selection_sort(alist))


代码流程:首先获取数组长度last,初始遍历时,默认0索引位置的元素最小,因此令first为1,first代表的意思是第一个与默认最小值进行比较的元素的索引(比如在进行第一轮遍历时,肯定是索引为1的元素与索引为0的元素比较,后面每轮的遍历类似推理即可);接着进入while循环,这里以开始比较的元素的索引与数组长度作条件判断,小于则进入遍历,否则终止循环(此内容下文针对示例结果具体讲解);对于内部的for循环,注意其范围:后者小于前者交换位置,否则不交换,这里可以看出后者元素的索引减1即为前者元素的索引,还是拿首次遍历来说,当first为1时,其减1则为0,因此实现了第一个元素与默认为最小的0位置的元素的比较,到了第二次遍历时,first为2,其减1为1,可实现2位置的与1位置的比较大小(此时的1为第二次遍历时的数组的首个元素的索引 '0')。。。。依次类推实现排序,在每次遍历完后可通过打印数组来查看每次的结果。first加1,就是由于每遍历一次,待排序的数组长度减1。下面结合示例结果说说:

1   # first值[1, 4, 7, 2, 6, 5, 3]  # 第一次遍历结果2   # first值[1, 2, 7, 4, 6, 5, 3]  # 第二次遍历结果3   # first值[1, 2, 3, 7, 6, 5, 4]  # 第三次遍历结果4   # first值[1, 2, 3, 4, 7, 6, 5]  # 第四次遍历结果5   # first值[1, 2, 3, 4, 5, 7, 6]  # 第五次遍历结果6   # first值[1, 2, 3, 4, 5, 6, 7]  # 第六次遍历结果
[1, 2, 3, 4, 5, 6, 7] # 最终结果


结果分析:待排序数组长度为7,则只需遍历6次,前6次确定6个元素,则最后一个元素无需比较。当first为6时,6<7,进入循环,比较的是上一轮第五次结果

[1, 2, 3, 4, 5, 7, 6]中的list[6]与list[6-1]的大小,也就是数值7和6交换位置,此时已经却确定好前6个数的位置,剩下最后一个位置的数,接着打印出第六次结果,然后first加1,此时7<7不成立,终止循环,此时的最后一个位置的数不进行比较也是最大的了,返回排序好的数组,结束。


复杂度:选择排序的平均复杂度仍为n**2;最优时间复杂度为n,即原数组为有序数组,遍历第一次时如果未发生交换即可跳出循环,可设定一个变量来记录交换次数详情可参考排序之冒泡排序该文章中的相关做法。

以上是"如何使用python实现选择排序"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

元素 数组 结果 排序 位置 索引 最小 长度 循环 选择 复杂 内容 复杂度 大小 次数 示例 第一次 篇文章 一轮 参考 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 搭建git服务器并管理 数据库可以申请知识产权吗 果蔬分拣系统软件开发 杭电数据库原理 山东办公系统软件开发费用是多少 数据库分区可以在建库时做吗 芝罘区微信公众号软件开发推荐 渔乐服务器 网络技术研究生招生简章 美国国防网络安全战略 网络安全应对处置机制 网络技术实训中心 工作环境及网络安全管理 软件开发部门结构的规划 网络安全分析研判会会议记录 网络安全总监吴迪 游戏服务器无法连接到互联网 软件开发类视频 蓝牙不是无线网络技术吗 英特尔工作站和服务器 加强网络安全的措施 开远计算机网络技术专业培训机构 软件开发公司专家顾问 手动停车场服务器一直刷新不出来 做个网站需要多大服务器 软件开发中心需要做柜员吗 巨杉数据库技术副总裁 计算机网络技术基础题目 企业管理软件开发教程 服务器pmi是什么意思
0