python-选择排序

news2024/9/23 23:32:03

选择排序是一种简单直观的排序算法,它的基本思想是每一轮选择未排序部分的最小元素,然后将其放到已排序部分的末尾。这个过程持续进行,直到整个数组排序完成。(重点:通过位置找元素)

以下是选择排序的详细步骤和 Python 实现:
在这里插入图片描述

选择排序 包括以下几个关键步骤:

  1. 初始状态: 将整个数组划分为已排序部分和未排序部分。初始时,已排序部分为空,未排序部分包含整个数组。

  2. 选择最小元素: 在未排序部分中找到最小的元素,并记录其索引。遍历未排序部分的元素,找到其中最小的元素。

  3. 交换位置: 将最小元素与未排序部分的第一个元素交换位置。通过交换,将最小元素放到已排序部分的末尾,同时将未排序部分的起始位置向右移动一个元素。

  4. 迭代: 重复执行步骤 2 和步骤 3,直到未排序部分为空。每一轮迭代都会选择未排序部分的最小元素,将其放到已排序部分的末尾。

  5. 排序完成: 当未排序部分为空时,整个数组排序完成。已排序部分包含整个数组,按顺序排列。

以下是选择排序的要点总结:

  • 不稳定性: 选择排序是一种不稳定的排序算法,相等元素的相对位置可能会改变。

  • 时间复杂度: 选择排序的时间复杂度为 O(n^2),其中 n 是数组的长度。这是因为每一轮都需要在未排序部分找到最小元素,而总共有 n-1 轮。

  • 空间复杂度: 选择排序的空间复杂度为 O(1),因为它只需要常数级的额外空间用于记录最小元素的索引。

  • 简单实现: 选择排序的实现相对简单,适用于对规模较小的数据集进行排序。然而,在大规模数据集上,性能相对较差,更高效的排序算法如快速排序和归并排序通常更为合适。

Python 实现选择排序:

def selection_sort(arr):
    n = len(arr)

    # 遍历整个数组
    for i in range(n):
        # 假设当前位置的元素为最小值
        min_index = i

        # 在未排序部分找到最小元素的索引
        for j in range(i + 1, n):
            if arr[j] < arr[min_index]:
                min_index = j

        # 将最小元素与未排序部分的第一个元素交换位置
        arr[i], arr[min_index] = arr[min_index], arr[i]

# 示例
arr = [64, 25, 12, 22, 11]
selection_sort(arr)
print("排序后的数组:", arr)

在这个示例中,selection_sort 函数实现了选择排序算法。它通过两层嵌套的循环,在每一轮外层循环中选择未排序部分的最小元素,并将其放到已排序部分的末尾。最后,输出排序后的数组。

个人示例:

"""选择排序  位置来找元素"""
sortList = [2,1,5,3,5,6,8]
for i in range(0,len(sortList)-1):
    """通过定义一个变量index 来记录 此时需排序的位置"""
    index=i
    for j in range(i+1,len(sortList)):  #
        if sortList[index] > sortList[j]:
            # 代码块内容
            index=j
    """循环结束 让最小的元素与相应位置上的元素进行交换"""
    sortList[index],sortList[i]=sortList[i],sortList[index]
print(sortList)

这段代码实现了选择排序的算法。以下是关键点的介绍:

外层循环 (for i in range(0, len(sortList) - 1)): 这是选择排序的外层循环,负责遍历整个数组。i 表示已排序部分的末尾位置,初始时为 0。

内层循环 (for j in range(i + 1, len(sortList))): 这是选择排序的内层循环,在未排序部分中查找最小元素。j 表示未排序部分的当前位置。对于 for j in range(i+1, len(sortList)) 中的 len(sortList),这表示整个数组的长度,而不是 len(sortList-1)。在编程中,数组的索引是从0开始的,所以数组的最后一个元素的索引是 len(sortList) - 1,而不是 len(sortList)。因此,在排序算法中,通常使用 len(sortList) 来表示数组的长度。在具体的排序算法中,for j in range(i+1, len(sortList)) 的目的是遍历数组中从索引 i+1 到数组末尾的所有元素,这正是未排序部分的元素。由于 Python 中 range 函数是左闭右开区间,所以 range(i+1, len(sortList)) 会遍历从 i+1 到 len(sortList)-1 的索引。
如果使用 len(sortList-1),则会导致遍历的结束位置是 len(sortList-1)-1,这与我们的预期不符,因为我们希望遍历到数组的最后一个元素。因此,正确的写法是使用 len(sortList)。

查找最小元素: 通过比较 sortList[index] 和 sortList[j] 的大小,如果找到更小的元素,更新 index。

交换位置 (sortList[index], sortList[i] = sortList[i], sortList[index]): 内层循环结束后,将找到的最小元素与已排序部分的末尾元素进行交换。

循环结束后输出排序后的数组 (print(sortList)): 外层循环执行完成后,整个数组就完成了排序。

总体来说,选择排序的核心思想是在未排序部分中选择最小的元素,然后与已排序部分的末尾元素交换,逐步完成排序。
在这里插入图片描述

选择排序的时间复杂度为 O(n^2),空间复杂度为 O(1)。尽管选择排序的性能相对较差,但它的实现简单,适用于较小规模的数据集。

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

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

相关文章

element ui 上传组件实现手动上传

首先需要给上传组件增加http-request属性&#xff0c;这个方法中可以获取到文件&#xff0c;并按照自己的方式进行上传。 <el-uploadreffileUploadaction#:http-requesthttpRequest:on-preview"handlePreview":on-remove"handleRemove":limit"1&q…

SpringBoot3核心原理

SpringBoot3核心原理 事件和监听器 生命周期监听 场景&#xff1a;监听应用的生命周期 可以通过下面步骤自定义SpringApplicationRunListener来监听事件。 ①、编写SpringApplicationRunListener实现类 ②、在META-INF/spring.factories中配置org.springframework.boot.Sprin…

接口测试:轻松掌握基础知识,快速提升测试技能!

1.client端和server端 开始接口测试之前&#xff0c;首先搞清楚client端与server端是什么&#xff0c;区别。 web前端&#xff0c;顾名思义&#xff0c;指用户可以直观操作和看到的界面&#xff0c;包括web页面的结构&#xff0c;web的外观视觉表现及web层面的交互实现。 web后…

Python---函数的参数类型

位置参数 理论上&#xff0c;在函数定义时&#xff0c;我们可以为其定义多个参数。但是在函数调用时&#xff0c;我们也应该传递多个参数&#xff0c;正常情况&#xff0c;其要一一对应。 相关链接&#xff1a;Python---函数的作用&#xff0c;定义&#xff0c;使用步骤&…

jQuery 第十一章(表单验证插件推荐)

文章目录 前言jValidateZebra FormjQuery.validValValidityValidForm BuilderForm ValidatorProgressionformvalidationjQuery Validation PluginjQuery Validation EnginejQuery ValidateValidarium后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&…

单链表的反转?太细了哥们!细到离谱!

单链表的反转&#xff08;面试常出&#xff09;&#xff1a; ​ 单链表的反转&#xff0c;可以通过很多种方法实现。包括迭代法&#xff0c;递归法&#xff0c; 迭代法&#xff1a; 定义三个指针&#xff1a;prev、current和next&#xff0c;它们分别表示前一个节点、当前节点…

Excel动态选择某一行/列的最后一个数据

选择列的最后一个数据&#xff1a; 以A列为例&#xff0c;使用&#xff1a; LOOKUP(1,0/(A:A<>""),A:A)选择行的最后一个数据&#xff1a; 以第3行为例&#xff0c;使用&#xff1a; LOOKUP(1,0/(3:3<>""),3:3)示例程序 列最后一个数据&a…

IO口速度影响了什么?

我们在初学单片机的时候都知道单片机GPIO的作用是巨大的&#xff0c;在配置GPIO的时候&#xff0c;结构体初始化里有一个选项是配置输入输出速度的&#xff0c;对于这个速度输出是必须要配置的&#xff0c;输入没有明令说明需不需要配置。 这个速度对于学习过32单片机的都应该知…

python——第十三天

uuid 是通用唯一识别码&#xff08;Universally Unique identifier&#xff09;的缩写 UUID是一个128比特的数值 uuid模块&#xff1a; 获取一个128位&#xff08;比特&#xff09;的永不重复的数字&#xff0c;当然我们使用的时候会转换为32个的字符串 impor uuud uui…

js粒子效果(二)

效果: 代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Particle Animation</title><…

C#,《小白学程序》第七课:列表(List)其一,编制《高铁车次信息表》

1 文本格式 /// <summary> /// 车站信息类 class /// </summary> public class Station { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; /// <summary> /// 车站名 /// </summary>…

【算法专题】滑动窗口—无重复字符的最长子串

力扣题目链接&#xff1a;无重复字符的最长子串 一、题目解析 二、算法原理 解法一&#xff1a;暴力解法&#xff08;时间复杂度最坏&#xff1a;O(N)&#xff09; 从每一个位置开始往后枚举&#xff0c;在往后寻找无重复最长子串时&#xff0c;可以利用哈希表来统计字符出现…

2023年【汽车驾驶员(中级)】最新解析及汽车驾驶员(中级)试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年汽车驾驶员&#xff08;中级&#xff09;最新解析为正在备考汽车驾驶员&#xff08;中级&#xff09;操作证的学员准备的理论考试专题&#xff0c;每个月更新的汽车驾驶员&#xff08;中级&#xff09;试题及解…

vue3 for循环创建的多个e-form 添加校验

v-for 创建 ref <el-form :model"item" :rules"state.rules" :ref"el > getRiskSpreadRef(el, index)" ></el-form>// 定义ref list const riskSpreadRefList ref<HTMLElement[]>([]);// ref存到数组 const getRiskSpread…

Error running Tomcat8: Address localhost:1099 is already in use 错误解决

摘要: 有时候运行web项目的时候会遇到 Error running Tomcat8: Address localhost:1099 is already in use 的错误&#xff0c;导致web项目无法运行。这篇 blog 介绍了解决办法。 有时候运行web项目的时候会遇到 Error running Tomcat8: Address localhost:1099 is already in …

C语言贪吃蛇(有详细注释)

这个贪吃蛇是在比特特训营里学到的&#xff0c;同时我还写了用EasyX图形库实现的图形化贪吃蛇&#xff0c;含有每个函数的实现以及游戏中各种细节的讲解&#xff0c;感兴趣的可以去看一看。 贪吃蛇小游戏 实现效果 以下就是源码&#xff0c;感兴趣的小伙伴可以cv自己玩一玩改…

vatee万腾的科技征途:Vatee独特探索的数字化力量

在数字化时代的浪潮中&#xff0c;Vatee万腾以其独特的科技征途成为引领者。公司在数字化领域的探索之路不仅是技术的创新&#xff0c;更是一种对未知的勇敢涉足&#xff0c;是对新时代的深刻洞察和积极实践。 Vatee万腾通过独特的探索&#xff0c;展示了在数字化征途上的创新力…

分享11款原型图软件,让你的创意无限发挥!

即时设计 即时设计是一个集设计、原型、开发于一身的一站式在线设计工具&#xff0c;也是一个可以云端编辑、团队写作的在线原型网站。 即时设计 - 可实时协作的专业 UI 设计工具即时设计是一款支持在线协作的专业级 UI 设计工具&#xff0c;支持 Sketch、Figma、XD 格式导入&…

为什么说赤霞珠是葡萄酒中的明星?

种植酿酒葡萄是一项艰难的事业&#xff0c;它的成功取决于许多不同的因素。土壤和气候是最关键的因素&#xff0c;它们决定了哪些酿酒葡萄可以在哪个地区培育。来自云仓酒庄品牌雷盛红酒分享但是有些酿酒葡萄品种适应性很强&#xff0c;几乎可以在任何地方生长&#xff0c;其中…

Interactive Visual Data Analysis

Words&Contents Home | Interactive Visual Data Analysis Book Outline 这本书对视觉、互动和分析方法进行了系统而全面的概述&#xff0c;作为数据可视化方面比较好的读物&#xff1b; 目录 Words&Contents Book Outline &#xff08;一&#xff09;Introduct…