Python实现选择排序

2023-11-04

选择排序简介
选择排序(Selection sort)是一种简单直观的排序算法。
简单来说就是从无序队列里面挑选最小的元素,和无序队列头部元素替换(放到有序队列中),最终全部元素形成一个有序的队列。
选择排序原理
首先在未排序序列中找到最小(大)元素,和无序队列的第一个元素替换位置,(即形成有序队列)
以此类推,直到所有元素全部进入有序队列,即排序完毕。

 

上代码:

def section_sort(alist):
    n = len(alist)
    # 定义外围循环次数
    for j in range(n - 1):
        # 定义min_index最小值的索引为j,目的找出最小值
        min_index = j
        # cur下标移动的范围,比较次数的范围限定
        for i in range(j + 1, n):
            # 元素比较,找出最小的值对应的索引
            if alist[i] < alist[min_index]:
                # 移动到最小元素的位置
                min_index = i

        # 保证最新的min_index不在无序队列的首位,那么就将它和无序队列的首位替换
        if min_index != j:
            alist[j], alist[min_index] = alist[min_index], alist[j]


if __name__ == "__main__":
    alist = [9, 8, 7, 6, 5, 4, 3, 2, 1]
    print("排序前:",alist)
    section_sort(alist)
    print("排序后:",alist)

关键点:
    1、mix标签初始化:min_index = j
    2、比较循环的范围:for i in range(j+1,n)
    3、元素替换的条件:if min_index != j
    4、排序次数范围的确定:for j in range(n-1)

时间复杂度

最优时间复杂度:O(n2) 
对于无序队列选取最小元素时候,所有数值都进行了比较。所以内部的最优时间复杂度是O(n)
对于选择排序的外部循环,只和无序列表元素个数相关,元素个数是n个,,所以外部的最优时间复杂度是O(n)
所以整体来说,对于选择排序的时间复杂度就是O(n2)

最坏时间复杂度:O(n2)
因为最好的时间复杂度就是O(n2)了,所以最坏的时间复杂度还是O(n2)

稳定性: 稳定(看情况)

 

思考:
改那个地方,结果是降序?
if alist[i] < alist[min_index]: 代码中的 < 改为 >
本节内容小结:
1、选择排序原理:无序最小第一交换,数次over。
2、选择排序实践步骤:无序选小,小一替换-外部选择循环-异常考虑

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python实现选择排序 的相关文章

随机推荐

  • R7-9 统计Java程序中关键词的出现次数

    编写程序统计一个输入的Java源码中关键字 区分大小写 出现的次数 说明如下 Java中共有53个关键字 自行百度 从键盘输入一段源码 统计这段源码中出现的关键字的数量 注释中出现的关键字不用统计 字符串中出现的关键字不用统计 统计出的关键
  • [Python+Django]Web图书管理系统毕业设计之数据库及系统实现源码篇

    前排提醒 本文干货超多 为避免消化不良建议配合目录食用 本系列博文献给即将毕业的程序猿们 系列文章共三篇 在编写的过程中可以说几乎是参照毕业设计目录样式来进行的 相关图表和截图也都几乎按照毕业设计论文的要求来编制 完整阅读消化此系列博文套上
  • 人眼定位python代码_使用dlib,OpenCV和Python进行人脸识别—人眼眨眼检测

    前期文章我们分享了如何使用python与dlib来进行人脸识别 以及来进行人脸部分的识别 如下图 dlib人脸数据把人脸分成了68个数据点 从图片可以看出 人脸识别主要是识别 人眉 人眼 人鼻 人嘴以及人脸下颚边框 每个人脸的部位都有不同的
  • 百度营销:百度扩量投放技巧

    众所周知百度是国内大部分用户都在使用的搜索引擎 百度搜索投放的是关键词形式 今天将带来一些账户优化的建议 放量模式 共享预算有哪些投放细节呢 以下梳理了5个小技巧 1 适合的账户类型 更适合预算充足的广告主 如果当前 你每天的获客量远远满足
  • layui之ajax--回调函数

    问题 一个简单的AJAX提交表单操作 经常发生后台数据保存好了 前端layer弹出层没有关闭 父页面没有刷新 定位发现是回调函数没有执行 用Google Chrome浏览器这种现象较少 而Safari 和 firefox浏览器100 发生
  • 2021-02-09 链表复制

    给你一个长度为 n 的链表 每个节点包含一个额外增加的随机指针 random 该指针可以指向链表中的任何节点或空节点 构造这个链表的 深拷贝 深拷贝应该正好由 n 个 全新 节点组成 其中每个新节点的值都设为其对应的原节点的值 新节点的 n
  • mysql查看数据库状态

    很赞的文章 https codeplayer vip p j7sc4 官方教程是最应该查看的文档 https dev mysql com doc refman 5 5 en show html 我真正关心的数据 比如一秒钟到底能插入多少行数
  • Package javax.ws.rs

    http docs oracle com javaee 6 api javax ws rs package summary html Annotation Types Summary ApplicationPath Identifies t
  • 新路程------imx6的模块编译的Makefile

    KERNEL SOURCE opt IMX6 linux 3 0 35 obj m ldb o default make C KERNEL SOURCE M PWD modules arm hismall linux gcc pcf8563
  • python numpy从坐标序列中计算累计移动距离

    也是从其他程序中学习得到计算距离 position 通过list来存储坐标xy position append x y position np array position 转换成数组 dist arr np concatenate np
  • 基于docker一行命令搭建个人博客wordPress

    前言 作为对技术热爱的一群小伙伴们 技术分享开源社区的贡献都是我们技术人引以为傲的一件事情 不仅如此 技术分享或者记录也是对自己职业成长的记录 更甚者 如果你的技术分享深度不错 并且帮助到别人那么在面试中也是又很大帮助的 今天就给大家谈一下
  • 两条轨迹相似度算法,轨迹相似性度量

    百度地图 百度地图是百度提供的一项网络地图搜索服务 覆盖了国内近400个城市 数千个区县 在百度地图里 用户可以查询街道 商场 楼盘的地理位置 也可以找到离您最近的所有餐馆 学校 银行 公园等等 2010年8月26日 在使用百度地图服务时
  • VS2019环境下C++配置环境/创建动态链接库

    文章目录 前言 一 配置环境 0 准备 1 添加项目表 2 include文件与lib文件的配置 include文件设置 lib文件配置 二 使用已有代码生成动态链接库 前言 最近有一个收尾的项目分到了手里 由于基本没有使用过VS2019所
  • linux内核oops错误码说明,Linux Kernel Oops异常分析

    0 linux内核异常常用分析方法 异常地址是否在0附近 确认是否是空指针解引用问题 异常地址是否在iomem映射区 确认是否是设备访问总线异常问题 如PCI异常导致的地址访问异常 异常地址是否在stack附近 如果相邻 要考虑是否被踩 比
  • 验证尼科彻斯定理

    验证尼科彻斯定理 即 任何一个整数的立方都可以写成一串连续奇数的和 问题分析与算法设计 本题是一个定理 我们先来证明它是成立的 对于任一正整数a 不论a是奇数还是偶数 整数 a a a 1 必然为奇数 构造一个等差数列 数列的首项为 a a
  • SVN迁移至GIT,并附带历史提交记录

    文章目录 SVN代码同步至GIT 背景 准备工作 操作步骤 SVN代码同步至GIT 背景 近年随着信息工程的多元化发展 GIT逐渐取代SVN成为主流的版本管理工具 部门的项目代码也决定迁移至git进行管理 所以就调研了一下具体的实现方案 要
  • linux创建git仓库

    1 安装 yum install y git 2 查看 Git 版本 git version 3 查看有没有git用户 id git 没有用户创建 useradd git 设置密码 passwd git 删除密码 passwd d f gi
  • Tomcat配置远程调试端口

    1 Linxu系统 bin startup sh开始处中增加如下内容 Java代码 declare x CATALINA OPTS server Xdebug Xnoagent Djava compiler NONE Xrunjdwp tr
  • JVM系列-第10章-垃圾回收概述和相关算法

    文章目录 toc 垃圾回收概述 大厂面试题 蚂蚁金服 百度 天猫 滴滴 京东 阿里 字节跳动 什么是垃圾 为什么需要GC 早期垃圾回收 Java 垃圾回收机制 自动内存管理 应该关心哪些区域的回收 垃圾回收相关算法 标记阶段 引用计数算法
  • Python实现选择排序

    选择排序简介 选择排序 Selection sort 是一种简单直观的排序算法 简单来说就是从无序队列里面挑选最小的元素 和无序队列头部元素替换 放到有序队列中 最终全部元素形成一个有序的队列 选择排序原理 首先在未排序序列中找到最小 大