选择排序

选择排序(Selection sort)是⼀种简单直观的排序算法。它的⼯作原理如下。⾸先在未排序序列中找到最⼩(⼤)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最⼩(⼤)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换⼀对元素,它们当中⾄少有⼀个将被移到其最终位置上,因此对n个元素的表进⾏排序总共进⾏⾄多n-1次交换。在所有的完全依靠交换去移动元素的排序⽅法中,选择排序属于⾮常好的⼀种。

选择排序分析

排序过程:

代码实现:

def selection_sort(alist):n = len(alist)# 需要进⾏n-1次选择操作for i in range(n-1):# 记录最⼩位置min_index = i# 从i+1位置到末尾选择出最⼩数据for j in range(i+1, n):if alist[j] < alist[min_index]:min_index = j# 如果选择出的数据不在正确位置,进⾏交换if min_index != i:alist[i], alist[min_index] = alist[min_index], alist[i]alist = [54,226,93,17,77,31,44,55,20]
selection_sort(alist)
print(alist)

时间复杂度

  • 最优时间复杂度:O(n 2 )
  • 最坏时间复杂度:O(n 2 )
  • 稳定性:不稳定(考虑升序每次选择最⼤的情况)

用Python实现选择排序相关推荐

  1. python八大选择排序_Python实现选择排序

    选择排序: 选择排序(Selection sort)是一种简单直观的 排序算法 .它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最 ...

  2. python实现选择排序

    python实现选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余 ...

  3. python简单选择排序_Python实现冒泡,插入,选择排序简单实例

    本文所述的Python实现冒泡,插入,选择排序简单实例比较适合Python初学者从基础开始学习数据结构和算法,示例简单易懂,具体代码如下: # -*- coding: cp936 -*-#python ...

  4. python写选择排序_如何快速掌握python选择排序算法?

    对于算法,我们不少讲述,但是大部分小伙伴都希望,将单个算法拆分讲解,这样可以更加深对算法的印象,好了,本期,就针对选择排序算法,给大家讲解说明哦~感兴趣的小伙伴一起来看下吧~ 在列表list模块中,已 ...

  5. php和python的选择排序算法,图文讲解选择排序算法的原理及在Python中的实现

    def sort_choice(numbers, max_to_min=True): """ 我这没有按照标准的选择排序,假设列表长度为n,思路如下: 1.获取最大值x, ...

  6. python八大选择排序_python之八大排序方法

    排序方法        平均情况        最好情况        最坏情况        辅助空间        稳定性 冒泡排序        O(n^2)         O(n)     ...

  7. Python实现选择排序算法

    第1关:选择排序 本关任务:首先给定一个长度大于1而且是乱序的列表,列表元素类型为整型,让后利用选择排序对列表元素进行排序,并输出每一次循环之后的结果. # 选择排序 arraystr = input ...

  8. Python版选择排序算法

    关于Python版冒泡排序算法请参考Python版冒泡法排序算法. def selectSort(lst, reverse=False): length = len(lst) for i in ran ...

  9. python简单选择排序_python 选择排序

    原博文 2018-09-21 23:46 − def select_sort(slist): for i in range(len(slist)): x = i for j in range(i, l ...

最新文章

  1. VMware虚拟机相关文件问题
  2. 第 1 章 虚拟化 - 013 - 动手实践 Linux VLAN
  3. ArrayList之坑点
  4. ubuntu source
  5. sql脚本对比工具_Java开发中用到的数据库迁移工具(flyway)
  6. 为今天的光纤检测选择光纤示波器
  7. 状态机学习(二)解析INI文件
  8. 直面桌面云带来的现状优势
  9. 提高个人执行力的途径
  10. 安卓逆向系列教程(三)静态分析工具
  11. 单线程JavaScript
  12. IDEA中使用JUnit4(单元测试框架)超详细!
  13. 台式计算机如何自动开关机,联想电脑怎么设置定时开机|联想台式机自动开机设置方法...
  14. 数学笔记27——极坐标下的面积
  15. iptables防火墙
  16. 超融合的网络bond和bridge模式。kvm+bond+bridge
  17. 光伏产业红与黑 需求寒冬背后暗藏分布式春天
  18. ES初探之——shard和replica
  19. 安卓手机重启日志_[手机维修自学教程]苹果安卓 手机无线重启故障原因维修技巧...
  20. 一个运动控制系统的实例

热门文章

  1. Bootstrap组件_输入框组
  2. oracle解除死锁
  3. android studio替换jdk,Mac Android Studio JDK7 替换
  4. android分钟倒计时,Android 三十分钟倒计时
  5. 在 Linux 操作系统中安装 Java
  6. Java 语法规定之外的命名注释规范
  7. JAVA标识符命名规则及命名规范
  8. DEDECMS中Showmsg的用法及参数介绍
  9. plsql developer 64位版本
  10. 大数据,大格局,大发展