python选择排序从大到小_Python实现选择排序

1e4c9549dbe35762e2102700b7b6c75f.png

一、选择排序简介

选择排序(Selection sort)是一种简单直观的排序算法。选择排序首先从待排序列表中找到最小(大)的元素,存放到元素列表的起始位置(与起始位置进行交换),作为已排序序列,第一轮排序完成。然后,继续从未排序序列中找到最小(大)的元素,存放到已排序序列的末尾。直到所有元素都存放到了已排序序列中,列表排序完成。选择排序每次都是去找最小(大)的元素,隐含了一种挑选的过程,所以被称为选择排序。

二、选择排序原理

选择排序的原理如下:1. 从待排序列表中找到最小的元素(升序排列,降序排列则找最大的元素),存放到列表的起始位置,作为已排序的序列。2. 继续从未排序序列中找到最小的元素,存放到已排序序列的末尾(同时也是未排序序列的起始位置)。3. 重复第2步,直到所有元素都已经存放到了已排序序列,则列表排序完成。以列表 [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21] 进行升序排列为例。列表的初始状态如下图。

14e8ff5215353818ec34324bfaf738a7.png

要进行升序排列,则每轮排序都要找到最小的元素。1. 找到元素列表中最小的元素,与列表起始位置的元素进行对比,如果最小的元素小于起始位置的元素,则交换位置。

9f7b83e14a4b2fec6039b18cfa6390a2.png

2. 5小于10,交换位置,将最小的元素存放到列表的起始位置。

9c69f0d02fc30c465109292ac7dc58cc.png

3. 将最小的元素作为已排序序列,后面的元素为未排序序列。

3703672020d9238b166da2a1a4d40cd9.png

4. 继续找到未排序序列中的最小元素,与未排序序列的第一个元素(已排序序列的末尾)比较,如果最小的元素更小则交换位置。

9d48e19925bbf4f0e284add09cff1d53.png

5. 7小于17,交换位置。将最小的元素存放在已排序序列的末尾。

3e40a0075ca3ac8e29e1eafbc03ea98d.png

6. 第二轮排序完成后,已排序序列的长度变成二,未排序序列的长度减一。

3014fd4d54a9f07451e885298bb5a570.png

7. 继续重复上面的4,5步骤,找到未排序序列中的最小元素,存放到已排序序列的末尾。每进行一轮排序,已排序序列的长度加一,未排序序列的长度减一,直到未排序序列的长度为1,列表排序完成。排序结果如下图。

41b5d413592a1e60acc0e928b5a72af2.png

三、Python实现选择排序

# coding=utf-8def selection_sort(array):    for i in range(len(array)-1):        min_index = i        for j in range(i+1, len(array)):            if array[j] < array[min_index]:                min_index = j        if min_index != i:            array[i], array[min_index] = array[min_index], array[i]    return arrayif __name__ == '__main__':    array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]    print(selection_sort(array))
运行结果:
[5, 7, 10, 15, 17, 21, 24, 27, 30, 36, 45, 50]
代码中,i 表示第几轮排序,j 表示走访未排序序列中元素的索引,将走访到的每一个元素与未排序序列的第一个元素进行比较。min_index 用于标记当前这一轮排序中最小元素的索引,如果走访到 j 索引的元素比 min_index 索引的元素小,则将 j 赋值给 min_index,j 继续走访。走访完所有元素后,将 min_index 索引的元素交换到 i 索引的位置(未排序序列的起始位置)。

四、选择排序的时间复杂度和稳定性

1. 时间复杂度在选择排序中,不管待排序列表的初始状态如何,都不影响排序的时间复杂度。选择排序需要进行 n-1 轮排序,每一轮排序需要进行 n-i 次比较,i 的平均值是 n/2 ,时间复杂度为 T(n)=n(n-1)/2 ,再乘每次操作的步骤数(常数,不影响大O记法),所以选择排序的时间复杂度为 O(n^2) 。2. 稳定性在选择排序中,每次都是选择未排序序列中的最小元素,交换到未排序序列的起始位置。存在相等的元素时,如果最小的元素都比它们靠后,最小的元素与相对位置靠前的元素进行交换,则它们的相对位置就发生了变化。如 [10, 10, 5],进行选择排序后两个 10 的相对位置发生了变化。所以选择排序是一种不稳定的排序算法。

b17ec961e4568f872a6c6682400c794a.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/397084.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/397084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Ubuntu14】Nginx+PHP5+Mysql记录

这次因为工作原因&#xff0c;需要在Linux下进行开发。推荐的环境是Ubuntu14NginxPHPMysql。环境搭建好之后&#xff0c;装上GIT&#xff0c;装上IDE&#xff0c;觉得Mysql命令界面麻烦又装了个Navicat。总体用下来感觉很带感。 【虚拟机与镜像文件】 这里我采用的虚拟机是VMwa…

java句柄数过高怎么解决_主播个人及企业利润高,个税或企业所得税怎么解决...

网络直播在2020年尤为火热&#xff0c;男女老少都纷纷投入其中&#xff0c;究其原因还是其行业表现出来的“利润高”等。也确实有部分人取得了一定的成效&#xff0c;也催生了不少的直播平台、经纪公司的出现。 那么这些主播个人或者企业利润高&#xff0c;个税或企业所得…

杂项-Java:JBoss

ylbtech-杂项-Java&#xff1a;JBoss是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可&#xff0c;可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器&#xff0c;支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WE…

任务调度及远端管理(基于Quartz.net)

这篇文章我们来了解一些项目中的一个很重要的功能&#xff1a;任务调度 可能有些同学还不了解这个&#xff0c;其实简单点说任务调度与数据库中的Job是很相似的东西 只不过是运行的物理位置与管理方式有点不一样&#xff0c;从功能上来说我觉得还是差不多的&#xff0c; 存储过…

2015/12/15--Document对象

<html> <head> <script type "text/javascript"> //使用document.write()输出流写文本 document.write("hello,world!"); //使用document.write()输出流写HTML document.write("<h1>welcome to my world!</h1>")…

C# 子类实例化基类 基类使用不了子类的方法_C#高级编程面试考题

一、简答题1.简述C#中的所有访问修饰符及访问权限private(私有的)给类&#xff0c;及所有类成员使用所有类成员的默认访问修饰符可访问范围当前类自身public(公开的)给类&#xff0c;及所有类成员使用可访问范围当前类自身所有的子类同一程序集其他类通过实例化也可以访问其他程…

协程(Coroutine)与多线程,多进程

执行多个任务可以使用多线程或多进程。 多进程中&#xff0c;同一个变量&#xff0c;各自有一份拷贝存在于每个进程中&#xff0c;互不影响 多线程中&#xff0c;所有变量都由所有线程共享。而线程间的切换是系统进行调度&#xff0c;无法控制&#xff0c;所以可能 一个进程中的…

关于img 403 forbidden的一些思考

网页中经常需要显示图片给用户看&#xff0c;对网站本身来说有的图片是从本地图片服务器来的&#xff0c;但是一旦数量多了以后&#xff0c;磁盘空间又是一个问题。 所以有时就希望显示其他网站的Image&#xff0c;直接把其他网站的图片显示在我的网站上。但并不是所有的外网Im…

Leetcode: Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.For example, Given [3,2,1,5,6,4] and k 2, return 5.Note: You may assume k is always valid, 1 ≤ k ≤ arrays lengt…

python 循环赋值_Python打牢基础,从19个语法开始!

Python简单易学&#xff0c;但又博大精深。许多人号称精通Python&#xff0c;却不会写Pythonic的代码&#xff0c;对很多常用包的使用也并不熟悉。学海无涯&#xff0c;我们先来了解一些Python中最基本的内容。Python的特点解释型语言&#xff0c;无需编译即可运行提供了交互式…

uwp连接mysql数据库_在 UWP 应用中使用 SQLite 数据库

在 UWP 应用中使用 SQLite 数据库Use a SQLite database in a UWP app06/26/2020本文内容可以使用 SQLite 在用户设备上的轻量级数据库中存储和检索数据。You can use SQLite to store and retrieve data in a light-weight database on the users device. 本指南演示如何执行该…

12-事件委托(事件代理)

什么是事件委托 通俗的讲&#xff0c;事件就是onclick&#xff0c;onmouseover&#xff0c;onmouseout&#xff0c;等就是事件&#xff0c;委托呢&#xff0c;就是让别人来做&#xff0c;这个事件本来是加在某些元素上的&#xff0c;然而你却加到别人身上来做&#xff0c;完成这…

oracle 窗口函数 (keep)

看到很多人对于keep不理解&#xff0c;这里解释一下&#xff01;Returns the row ranked first using DENSE_RANK2种取值&#xff1a;DENSE_RANK FIRSTDENSE_RANK LAST在keep (DENSE_RANK first ORDER BY sl) 结果集中再取max、min的例子。SQL> select * from test;ID MC SL…

MySQL 的实时性能监控利器

操作系统及MySQL数据库的实时性能状态数据尤为重要&#xff0c;特别是在有性能抖动的时候&#xff0c;这些实时的性能数据可以快速帮助你定位系统或MySQL数据库的性能瓶颈&#xff0c;就像你在Linux系统上使用「top&#xff0c;sar&#xff0c;iostat」等命令工具一样&#xff…

设置linearlayout最大高度_技术案例 | 排烟口个数与挡烟垂壁高度的关系探讨

随着《建筑防烟排烟系统技术标准》( 以下简称新规范) 的正式实施&#xff0c;新规范对排烟系统的设计提出了完全不同的设计理念。根据新规范正文: 当建筑空间净高不大于6m时&#xff0c;每个防烟分区的排烟量应按不小于60m/(h㎡)计算且不小于15,000m/h( 走道不小于13,000m/h) &…

python安装requests第三方模块

2018-08-28 22:04:51 1 .下载到桌面后解压&#xff0c;放到python的目录下 --------------------------------------------------------------------------------------------------------------------------------------------------------- 2 . 在CMD输入以下 F:\>cd /d F…

mysql整站源码安装_MySQL入门01-MySQL源码安装

操作系统&#xff1a;CentOS 6.7MySQL版本&#xff1a;5.6.301.前期准备首先需要CMake&#xff0c;可以yum直接安装&#xff1a;yum install cmake也可以官网 https://cmake.org/ 下载源码编译。我这里选择了官网下载最新版本cmake-3.5.2.tar.gz。# tar -zxvf cmake-3.5.2.tar.…

集算器协助Java处理结构化文本之条件过滤

直接用Java实现文本文件中数据按条件过滤会有如下的麻烦: 1、文件不是数据库&#xff0c;不能用SQL访问。当过滤条件变化时需要改写代码。如果要实现象SQL那样灵活的条件过滤&#xff0c;则需要自己实现动态表达式解析和求值&#xff0c;编程工作量非常大。 2、文件太大时不能一…

python3动态加载模块的方法实现

2019独角兽企业重金招聘Python工程师标准>>> 需求 我们有时写了一个功能&#xff0c;需要不断地调整&#xff0c;但是已经在线上了&#xff0c;而且在执行任务&#xff0c; 这时要更新上去源文件&#xff0c;而不能结束掉当前进程,怎么办&#xff1f; 所以这时&…

python 浮点数最小值_PYTHON学习笔记(3)——基本数据类型

本次学习原内容均来自MOOC国家精品课程《Python程序语言设计》嵩天第一篇在问题——“今天python了吗&#xff1f;”中基本数据类型1、 整数&#xff08;1&#xff09;整数无限制 pow(x,y) 计算 &#xff08;2&#xff09;四种进制 2、 浮点数类型&#xff08;1&#xff09;取整…