python排序算法之选择排序

作者:i阿极 时间:2023-03-15 11:56:56 

一、前言

相关知识来自《python算法设计与分析》。初级排序算法是指几种较为基础且容易理解的排序算法。初级排序算法包括插入排序、选择排序和冒泡排序3种。虽然它们的效率相对于高级排序算法偏低,但是在了解初级排序算法之后,再去学习相对复杂的高级排序算法会容易许多。本文介绍选择排序。

二、描述

选择排序表示从无序的数组中,每次选择最小或最大的数据,从无序数组中放到有序数组的末尾,以达到排序的效果。

选择排序的平均时间复杂度是O(n2),最好情况下的时间复杂度和最坏情况下的时间复杂度都是O( n2 )。另外,它是一个不稳定的排序算法。选择排序的过程很容易理解。如图2-4所示,我们仍以递增排序的算法为例,先遍历未排序的数组,找到最小的元素。然后,把最小的元素从未排序的数组中删除,添加到有序数组的末尾。

python排序算法之选择排序

因为最小的元素是1,所以1被添加到仍为空的有序数组末尾。

如图2-5所示,我们继续对剩余元素进行遍历。这次,最小的元素是2。我们把它添加到已排序的数组末尾。由于已在有序数组中的元素必定小于未排序数组中的所有元素,所以这步操作是正确无误的。

python排序算法之选择排序

如图2-6所示,重复上述步骤,当未排序数组中只剩下一个元素时,把它添加到已排序的数组末尾,整个数组的排序就完成了。

python排序算法之选择排序

三、代码实现

选择排序代码:

nums = [5,3,6,4,1,2,8,7]
res = []#用于存储已排序元素的数组
while len(nums): #当未排序数组内还有元素时,重复执行选择最小数的代码
minInd = 0 #初始化存储最小数下标的变量,默认为第一个数
for i in range(1, len(nums)):
 if(nums[i] < nums[minInd]): #更新最小数的下标
   minInd = i
temp = nums[minInd]
nums.pop(minInd) #把最小数从未排序数组中删除
res.append(temp) #把最小数插入到已排序数组的末尾
print(res)

运行程序,输出结果为:

[1,2,3,4,5,6,7,8]

在程序中,第一个for循环中的i代表了有序数组之后的第一个位置,也就是未排序数组中的第一个位置。随后,再使用一个for循环,在未排序数组中找到最小值的下标。首先,把最小值下标minInd初始化为未排序数组中第一个元素的下标。随后,遍历整个数组,遇到比目前的最小值更小的元素时,更新下标即可。找出最小值后,把它和未排序数组中的第一个元素交换位置,这时它就成了有序数组中的最后一个元素。

来源:https://blog.csdn.net/AOAIYI/article/details/128632969

标签:python,排序,算法,选择排序
0
投稿

猜你喜欢

  • 在CentOS 6 中安装WordPress(一) 安装Apache,Mysql, PHP环境

    2023-11-06 17:41:24
  • Silverlight与Flash的技术比较

    2009-04-19 18:45:00
  • vue+php实现的微博留言功能示例

    2023-11-18 01:47:02
  • 减少新开窗口提升可访问性

    2009-04-17 13:56:00
  • asp如何在约定时间显示特定的提示信息?

    2010-06-28 16:52:00
  • 一个asp正则替换的方法

    2008-11-25 14:05:00
  • 彻底终结浏览器Cache页面的解决方案

    2008-04-21 15:10:00
  • CSS自适应宽度圆角按钮

    2007-11-20 11:38:00
  • Server_Name与Http_Host的区别

    2008-06-19 13:39:00
  • 如何在社区建立一个寻呼台?

    2009-11-08 18:59:00
  • 有故事的网页设计——Flash网站奇妙之旅

    2011-01-20 19:58:00
  • 15款非常有用的前端开发CSS网格(grid system)生成器

    2009-07-06 13:02:00
  • ASP运行环境iis和pws的搭建

    2007-09-22 18:44:00
  • 正则表达式不匹配某个字符串

    2010-03-02 22:08:00
  • Golang依赖注入工具digo的使用详解

    2023-08-27 13:00:43
  • 用ASP显示ACCESS数据库的GIF图象

    2008-11-16 18:09:00
  • 友情连接地址代码-线线表格

    2010-07-01 16:26:00
  • 科讯cms文章分页列表页码样式的修改

    2008-07-10 13:11:00
  • Golang 内存管理简单技巧详解

    2023-06-24 22:38:18
  • 使用Python写一个小游戏

    2023-07-20 17:31:07
  • asp之家 网络编程 m.aspxhome.com