chatgpt赋能python:Python选择排序算法图解

news2024/12/28 19:21:29

Python选择排序算法图解

选择排序是计算机科学中经典的排序算法之一,它的原理是从待排序的数据中选择最小的元素然后排在最前面,接着从剩下未排序的数据中继续这个过程,直到所有的数据都排好序。

在本篇文章中,我将深入探讨Python中选择排序算法的详细过程,并用可视化的方式帮助您更好地理解这个算法的工作原理。

算法步骤

下面是Python中选择排序算法的几个简单步骤:

  1. 从待排序的数据中找到最小元素的位置。
  2. 将最小元素与未排序数据的第一个元素进行交换。
  3. 接着在剩下未排序的数据中继续这个过程,直到所有的数据都排好序。
  4. 返回排序好的数据。

具体实现

让我们以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[min_index] > arr[j]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]
    return arr

算法接收一个待排序的列表,并返回排序好的列表。在函数内部,我们使用了两个嵌套的循环:外层循环从第一个到倒数第二个元素进行迭代,内层循环从外层循环的下一个元素到列表的最后一个元素进行迭代,这样我们就可以找到未排序部分中的最小元素并将其与未排序部分的第一个元素进行交换。

代码示例

接下来,让我们使用一个简单的例子来说明选择排序算法的工作原理。

我们将要排序的数据定义为:

arr = [64, 25, 12, 22, 11]

在第一次迭代中,第一个元素64会被作为最小元素,然后我们继续向后遍历寻找更小的元素,直到遇到11,然后将两个元素进行交换,得到以下列表:

[11, 25, 12, 22, 64]

在第二次迭代中,第二个元素25会被作为最小元素,并将其与第二个位置的元素进行交换,得到以下列表:

[11, 12, 25, 22, 64]

在第三次迭代中,第三个元素25会被作为最小元素,并将其与第三个位置的元素进行交换,得到以下列表:

[11, 12, 22, 25, 64]

在第四次迭代中,第四个元素25会被作为最小元素,并将其与第四个位置的元素进行交换,得到以下列表:

[11, 12, 22, 25, 64]

在我们的最后一次迭代中,我们已经将所有的元素排好序了,所以算法就会在这里终止。

可视化过程

为了使排序过程更清晰明了,我们可以使用Python可视化库matplotlib来绘制出排序的过程。

首先,我们使用一个辅助函数来进行可视化:

import matplotlib.pyplot as plt

def plot(arr, curr_min=None, swap=None):
    n = len(arr)

    fig, ax = plt.subplots()
    ax.bar(range(n), arr)

    if curr_min is not None:
        ax.plot(curr_min, arr[curr_min], "ro")

    if swap is not None:
        ax.plot(swap[0], arr[swap[0]], "yo")
        ax.plot(swap[1], arr[swap[1]], "yo")

    plt.show()

然后,我们调用这个函数来可视化选择排序的每一步:

def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_index = i
        for j in range(i+1, n):
            if arr[min_index] > arr[j]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]
        plot(arr, curr_min=min_index, swap=(i, min_index))
    return arr

arr = [64, 25, 12, 22, 11]
selection_sort(arr)

在这里我们调用了plot函数可视化代码的每个步骤,包括寻找最小元素和交换元素。

您可以将这段代码复制到Python的IDE或Jupyter Notebook中运行,以便更好地了解选择排序算法的工作原理。

结论

在本篇文章中,我们深入介绍了Python中的选择排序算法,并提供了可视化的示例来帮助您更好地理解排序过程。尽管选择排序算法的时间复杂度达到了O(n^2),但是该算法仍然是一种易于理解和实现的排序算法,适用于小规模的排序任务。

最后的最后

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。

对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。

🧡AI职场汇报智能办公文案写作效率提升教程 🧡 专注于AI+职场+办公方向。
下图是课程的整体大纲
img
img
下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具
img

🚀 优质教程分享 🚀

  • 🎄可以学习更多的关于人工只能/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
学习路线指引(点击解锁)知识定位人群定位
🧡 AI职场汇报智能办公文案写作效率提升教程 🧡进阶级本课程是AI+职场+办公的完美结合,通过ChatGPT文本创作,一键生成办公文案,结合AI智能写作,轻松搞定多场景文案写作。智能美化PPT,用AI为职场汇报加速。AI神器联动,十倍提升视频创作效率
💛Python量化交易实战 💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。

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

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

相关文章

微服务架构之网关详解

前言 由于互联网的高速发展,网络数据请求数激增,使得服务器承受的压力越来越大。在早期的系统架构中,为减轻单台服务器的压力,通常使用 Load Balancer 来将网络流量平摊到多个服务器中。如今后端服务的种类和数量在不断变多&…

Django DRF - 【Token】认证基本使用

一. 前言 Django Rest Framework Token是Django Rest Framework中的一个扩展,用于实现用户认证和授权。它为每个用户生成一个唯一的Token,并将其存储在数据库中。在用户进行API请求时,用户需要在请求的HTTP Header中包含Token,这…

【广州华锐互动】机械设备事故VR模拟体验系统

随着虚拟现实技术的不断发展,越来越多的行业开始尝试将VR技术应用到实际场景中,以提供更加真实的体验。其中,机械伤害事故VR警示教育系统的出现,为机械工程师、安全培训人员等行业提供了一种全新的培训方式。在实现上,…

odoo16 中ondelete的用法

odoo 中的many2one类型字段有 ondelete设置,对应数据表中关系处理 a fields.Many2one(‘b’, string‘b’, ondelete‘set null’) 则当对模型b进行delete操作时,会引发如下操作 set null: 当b中删除记录时,modelA中相关记录的anull casc…

Redis实战案例8-缓存击穿及其解决方案和案例说明

1. 缓存击穿 缓存击穿是指一个被频繁访问(高并发访问并且缓存重建业务较复杂)的缓存键因为过期失效,同时又有大量并发请求访问此键,导致请求直接落到数据库或后端服务上,增加了系统的负载并可能导致系统崩溃 常见的解决…

开源虚拟化工具VirtualBox安装部署

什么是Virtualbox VirtualBox是一款由Oracle开发和维护的免费开源虚拟化软件,用于在一台计算机上创建和管理多个虚拟机。它允许用户在单个物理计算机上运行多个操作系统,例如Windows、Linux、macOS等。VirtualBox提供了一个虚拟化环境,使用户…

详细介绍如何使用 OpenCV 实现自动文档扫描仪--附实现源码

文末附相关源代码实现的免费下载链接 文档扫描是将物理文档转换为数字形式的过程。可以通过扫描仪或手机摄像头拍摄图像来完成。我们将在本教程中讨论如何使用计算机视觉和图像处理技术有效地实现这一目标。 在当今的计算机时代,几乎不需要任何物理文书工作。尽管如此,在仍…

现代操作系统第一章学习笔记

先附上一个原版的课后习题答案的链接。 课后习题答案 1.1 什么是操作系统 操作系统:他的任务是为应用程序提供一个更好、更简单、更清晰的计算机模型,并管理贮存、磁盘等所有设备。 计算机系统总的来说分为软件和硬件,如下图所示。多数计算…

华为孟晚舟:拥抱5G变革

2023 MWC上海开幕,华为副董事长、轮值董事长、CFO孟晚舟在大会上发表了“拥抱5G变革”的主题演讲。她表示:全球5G商用4年来,正持续引领价值创造,而5.5G是5G网络演进的必然之路;面向未来,科技走向复杂大系统…

突破未来:SAP助力新能源产业腾飞!

新能源行业概况 在互联网的时代浪潮下,多数行业都开始进行了调整与整合,竞争无处不在。作为新兴的新能源行业,如果不想从竞争中被淘汰,就需要把握时代的脉搏,找到突破口,带领企业在市场竞争中越走越远。我…

学习:PSM倾向得分匹配基于stata实现

PSM倾向性匹配得分 定义 就是一个用户属于实验组的倾向性,也就是在特定特征的情况下属于实验组的概率(条件概率) 其他定义: PSM 通过统计学模型计算每个观测的每个协变量的综合倾向性得分,再按照倾向性得分是否接近进⾏匹配。 用直白的话来…

大数据技术——电影推荐系统大数据综合实训项目

具体文档请参考如下链接: https://download.csdn.net/download/qq_53142796/87949491https://download.csdn.net/download/qq_53142796/87949491 https://download.csdn.net/download/qq_53142796/87949489https://download.csdn.net/download/qq_53142796/879494…

2.设计模式之前5种设计模式单例工厂原型建造者适配器

1.怎么掌握设计模式? 独孤5剑 先是锋利的剑 后面是无剑才是最强的 ,GOF四人组写的<设计模式>书,包含了23种,实际可能还有其他,不要被束缚(只是覆盖了大部分).设计模式适合的人群: 1.不知道设计模式 2.有编程经验,但是写的好多代码有设计模式却不知道 3.学习过设计模式,发…

Unity 提取并拷贝Hierarchy路径

提取并拷贝Hierarchy路径 &#x1f354;效果&#x1f96a;食用 &#x1f354;效果 &#x1f96a;食用 &#x1f4a1;.导入包后直接选中GameObject右键选择&#xff1a;复制Hierarchy路径 &#x1f4a1;.快捷键Ctrl V 即可粘贴路径

SurfaceFlinge/InputFlinger分析-android画面缩放后依然点击正常原理分析

hi&#xff0c;粉丝朋友们&#xff1a; 这两天刚好在做自由窗口相关国内需求&#xff0c;刚好遇到一个疑惑&#xff0c;那就是画面进行缩放后发现依然触摸画面可以正常反映问题。 具体疑惑背景 疑问点如下&#xff1a; 坐标是针对屏幕的&#xff0c;按钮也是相对Activity的&…

【SPI】STM32 SPI 双机通信,SPI从机模式使用

文章目录 一、SPI主机配置二、SPI从机配置三、双机通信1 轮询中断&#xff08;低速&#xff09;2 轮询DMA&#xff08;低速&#xff09;3 DMADMA&#xff08;高速&#xff09;4 开启CRC校验&#xff08;自选&#xff09; 四、遇到的问题1 高速使用时&#xff0c;程序卡死&#…

JavaScript 原型与原型链

所有的 JavaScript 对象都会从一个 prototype&#xff08;原型对象&#xff09;中继承属性和方法&#xff1a; Date 对象从 Date.prototype 继承。 Array 对象从 Array.prototype 继承。 所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例。 JavaScript 对象有一个指…

【C#】代码解析--打印数据集

系列文章 【C#】编号生成器&#xff08;定义单号规则、固定字符、流水号、业务单号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器&#xff08;开始日期、结束日期&#xff09; 本文链接&#xff1a;h…

LangChain:LLM应用程序开发(中)——文档问答、评估、Agents(代理)

文章目录 四、文档问答4.1 快速入门4.2 逐步实现4.3 其它方法 五、评估5.1 创建QA app5.2 生成测试数据点5.2.1 Hard-coded examples5.2.2 LLM-Generated examples 5.3 link chain debug手动评估5.4 LLM assisted evaluation5.5 LangChain Evaluation platform 六、Agents&…

704.二分查找

一、题目 二、代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int search(int* nums, int numsSize, int target) {int left 0;int right numsSize - 1;while (left < right) {int middle (left right) / 2;if (target > nums[middle]) {left m…