python排序算法之选择排序

 更新时间:2023年04月23日 10:03:19   作者:i阿极  
这篇文章主要介绍了python排序算法之选择排序,选择排序表示从无序的数组中,每次选择最小或最大的数据,从无序数组中放到有序数组的末尾,以达到排序的效果,需要的朋友可以参考下

一、前言

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

二、描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

三、代码实现

选择排序代码:

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初始化为未排序数组中第一个元素的下标。随后,遍历整个数组,遇到比目前的最小值更小的元素时,更新下标即可。找出最小值后,把它和未排序数组中的第一个元素交换位置,这时它就成了有序数组中的最后一个元素。

总结

以上就是要讲的内容,本文介绍了选择排序的理论知识和代码实现。选择排序表示从无序的数组中,每次选择最小或最大的数据,从无序数组中放到有序数组的末尾,以达到排序的效果。选择排序的平均时间复杂度是O(n2),最好情况下的时间复杂度和最坏情况下的时间复杂度都是O( n2 )。另外,它是一个不稳定的排序算法。

到此这篇关于python排序算法之选择排序的文章就介绍到这了,更多相关python选择排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python和anaconda区别以及先后安装的问题详解

    python和anaconda区别以及先后安装的问题详解

    Anaconda(开源的Python包管理器)是一个python发行版,包含了conda、Python等180多个科学包及其依赖项,下面这篇文章主要给大家介绍了关于python和anaconda区别以及先后安装问题的相关资料,需要的朋友可以参考下
    2022-05-05
  • python脚本请求数量达到上限,http请求重试问题

    python脚本请求数量达到上限,http请求重试问题

    这篇文章主要介绍了python脚本请求数量达到上限,http请求重试问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Python3如何使用range函数替代xrange函数

    Python3如何使用range函数替代xrange函数

    这篇文章主要介绍了Python3如何使用range函数替代xrange函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 教你利用python的matplotlib(pyplot)绘制折线图和柱状图

    教你利用python的matplotlib(pyplot)绘制折线图和柱状图

    Python绘图需要下载安装matplotlib模块,它是一个数学绘图库,我们将使用它来制作简单的图表,如折线图和散点图,下面这篇文章主要给大家介绍了关于利用python的matplotlib(pyplot)绘制折线图和柱状图的相关资料,需要的朋友可以参考下
    2022-05-05
  • Python实现希尔排序,归并排序和桶排序的示例代码

    Python实现希尔排序,归并排序和桶排序的示例代码

    希尔、归并、快速排序算法可归为同一类,它们的共同点都是建立在分治思想之上。把大问题分拆成小问题,解决所有小问题后,再合并每一个小问题的结果,最终得到对原始问题的解答。本文将介绍这三种算法的实现代码,需要的可以参考一下
    2022-04-04
  • 解决pycharm 工具栏Tool中找不到Run manager.py Task的问题

    解决pycharm 工具栏Tool中找不到Run manager.py Task的问题

    今天小编就为大家分享一篇解决pycharm 工具栏Tool中找不到Run manager.py Task的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python pandas合并Sheet,处理列乱序和出现Unnamed列的解决

    python pandas合并Sheet,处理列乱序和出现Unnamed列的解决

    这篇文章主要介绍了python pandas合并Sheet,处理列乱序和出现Unnamed列的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Django集成富文本编辑器summernote的实现步骤

    Django集成富文本编辑器summernote的实现步骤

    在最近的项目中小编使用了这个富文本编辑器,选择它的主要原因是配置非常简单,默认支持普通用户上传图片(不像ckeditor默认只有staff user才能上传图片。如果要让普通用户上传图片,还需修改源码装饰器)。现在让我们来看看如何使用这个富文本编辑器
    2021-05-05
  • Python字符串格式化的方法(两种)

    Python字符串格式化的方法(两种)

    这篇文章主要介绍了Python字符串格式化的方法(两种) ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 详解Python安装tesserocr遇到的各种问题及解决办法

    详解Python安装tesserocr遇到的各种问题及解决办法

    这篇文章主要介绍了详解Python安装tesserocr遇到的各种问题及解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论