选择排序代码及时间空间复杂度

算法——冒泡排序、选择排序、插入排序的算法思想+C++代码实现+时间空间复杂度 一、冒泡排序 1、排序思想:假设对N个数进行排序,他们的位置分别是0、1、2....、N-1。首先比较0和1位置上的元素,如果0位置上的元素大于1位置上的元素,则交换两个位置上的元素,否则不做调整;接着比较1位置上和2位置上的元素,如果1位置上的元素大于2位置上的元素,则交换两个位置上的元素,否则不交换;..........;最后比较N-2和N-1位置上的元素,如果N-2位置上的元素大于N-1位... 阅读详情

选择排序(Selection Sort)是一种简单的排序算法,它不断选择未排序部分的最小元素,并将其放置在已排序部分的末尾。以下是选择排序的代码示例以及时间和空间复杂度分析,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。

选择排序的代码示例(升序排序):

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, 34, 25, 12, 22, 11, 90]
selection_sort(arr)
print("排序后的数组:", arr)

时间复杂度分析:

选择排序的时间复杂度与输入数据的初始排列无关,因为它总是进行相同数量的比较和交换。在每一轮中,选择排序会找到未排序部分的最小元素,然后将其放置在已排序部分的末尾。因此,无论数据是否有序,选择排序都需要执行 n-1 轮比较和 n-1 轮交换,其中 n 是数组的长度。因此,选择排序的时间复杂度始终为 O(n^2)。

空间复杂度分析:

选择排序是一种原地排序算法,它不需要额外的空间来存储数据,因此其空间复杂度是 O(1),即常数级别的空间消耗。

总结:选择排序是一种简单但不是特别高效的排序算法,特别适合小型数据集。由于其时间复杂度为 O(n^2),在大规模数据集上性能相对较差。通常情况下,更高效的排序算法,如快速排序和归并排序,更常被使用。但选择排序的一个优点是,它对于在每次交换时都有特殊需求的情况可能更有用,因为它可以最小化交换操作的次数。

排序算法——选择排序 目录 🐾基本介绍 🌞算法思想: 🌰实例: ⛅思路分析: 🌈总结: 🛴代码实现: 🛹算法性能分析 🍕时间复杂度 🍧空间复杂度 🍰稳定性 🐾基本介绍 选择排序(select sorting)也属于内部排序法,是从待排序的数据中,按指定的规则选出某一元素,再按照规定交换位置后达到排序的目的。 🌞算法思想: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,将元素存放在序列的起始位置(即与待排序列的第一个元素的位置进行交换)。然后再从剩余的未排序元素中寻找最小(或最大)的元素, 阅读详情

相关推荐

利用ArcGIS的模型构建器实现批量投影栅格和批量克里金插值

博主要批量投影几百个栅格,但是ArcGIS中的投影栅格的批处理工具需要手动一条条设置参数,还是麻烦,因此学习了使用模型构建器(ModelBuilder)来批量投影栅格,可以导入需投影栅格的文件夹,然后迭代投影,并按栅格原名逐个输出到指定目录。 1.在工具箱里构建模型 在arctool box里右键点击空白处,选择【添加工具箱】,点击ArcGIS默认工作目录的工具箱进行添加,然后Toolbox就会被添加到ArcToolbox页面,右键点击Toolbox,选择“新建”-“模型” 2.编写模型 (1).

qq_36958801的博客 1万+

排序和复杂度

从右边开始,指针往右偏移,直到找到比39小的,然后将该数放到中心元素位置,然后左边指针开始向右偏移,找到比39大的,将该数放到右边指针停留的位置,然后右边指针再向左偏移,如此循环,将堆顶元素与末尾元素进行交换,使末尾元素最大,然后继续调整堆,再将堆顶元素与末尾元素交换,得到第二大元素,如此反复进行交换,重建,交换。任取待排序序列的一个元素作为中心元素(可以用第一个,最后一个,也可以是中间任何一个),习惯将其称为。4.此时,交换导致了子根[4,5,6]结构混乱,继续调整,[4,5,6]中6最大,交换4和6。

m0_45190002的博客 4178

AD20/Altium designer——元器件批量命名与编号的高效技巧

本文详细介绍了在AD20/Altium Designer中实现元器件批量命名与编号的高效技巧。通过解析核心的“原理图标注”功能,从基础全局操作到进阶的按模块分区、利用标识符及合并BOM等智能方法,帮助硬件工程师彻底告别手动编号,大幅提升设计效率与文档规范性,并融入了一套完整的实战工作流。

whisky的博客 569

数据结构之选择排序 (算法思想、复杂度分析)

选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。 但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。 eg:代码实现: public static void selectionSort(int[] array){ int n = array.length; if(n <= 1){ return; }else...

C_U_N_Z的博客 1781

AM驱动架构—优质Mini-LED显示技术解决方案

(VR)和增强现实(AR)设备:MiniLED背光驱动方案适用于虚拟现实和增强现实设备中的显示技术,通过高亮度和高对比度的显示效果,创造更逼真的虚拟体验此外,MiniLED背光还能够实现更快的响应速度,减少图像残影,使得用户的动作在虚拟环境中更加流畅自然。以其出色的性能和广泛的应用前景备受关注是实现MiniLED显示效果的重要环节。1)更高的亮度和对比度:尺寸更小,可以在同样面积的显示屏上配置更多的LED,并且通过独立控制每一个MiniLED,可以实现更高的亮度和更细致的对比度,使得显示画面更加鲜明清晰。

isweekDN的博客 2764

【项目实战】功能安全目标有四个ASIL等级:A、B、C、D,ASIL D是最高的等级

功能安全是一种关注产品在异常情况下如何避免造成伤害的概念功能安全在汽车电子行业中非常重要。功能安全涉及到系统、电子和软件三个部分。(1)系统部分主要涉及概念设计(2)而具体的实施则是在电子和软件部分完成。

奶爸的编程之路,也就一周冷个三天 2830

数据结构:排序- 插入排序(插入排序and希尔排序) , 选择排序(选择排序and堆排序) , 交换排序(冒泡排序and快速排序) , 归并排序

数据结构:排序- 插入排序(插入排序and希尔排序) , 选择排序(选择排序and堆排序) , 交换排序(冒泡排序and快速排序) , 归并排序

2301_77649794的博客 5859

黑猫带你学UFS协议第13篇:UFS初始化详解(Boot Operation)

本文详细解析了UFS设备的初始化过程,包括部分初始化、加载启动代码(可选)和初始化完成三个阶段。重点介绍了如何通过设备描述符和逻辑单元描述符配置引导特性,以及如何从UFS设备加载启动代码。内容适用于嵌入式硬件和存储领域的开发者。

黑猫奥利奥的博客 3555

选择排序,插入,快排,冒泡排序的时间空间复杂度详解

时间复杂度 在算法的分析中,语句的执行次数T(n)是一个关于n(问题规模)的一个函数。分析n的变化引起T(n)的改变,进而得到T(n)的数量级,也就是时间频率。如果存在某一个辅助函数f(n),当n趋于无穷大时,T(n)/f(n)的值为一个不为0的常数,有T(n)=O(f(n)),这就是算法的渐进时间复杂度,也就是我们常说的时间复杂度。 大O表示法:用O(f(n))来体现时间复杂度的方法被称作大O表示法; 大O推导法: O(1)叫做常数阶;O(n)叫做线性阶;O(n^2)叫做平方阶。 用常数1取代运行时间中

SamGeren的博客 2万+

16、二阶差分功耗分析(DPA)的再审视

本文深入探讨了二阶差分功耗分析(DPA)中的关键问题,包括不同组合函数的性能、信息论分析以及在有轮廓和无轮廓攻击场景下的实验结果。通过对掩码AES和DES的模拟和实际攻击实验,研究了归一化乘积、求和和绝对差值等组合函数在不同噪声水平下的效率,并强调了信息论分析在评估侧信道对抗措施中的重要性。

leaf8的博客 120

10. 重磅!Spring AI 1.0 正式发布,Java 开发者的 AI神器!

重磅!Spring AI 1.0 正式发布,Java 开发者的 AI神器! 全网最详细的Spring AI 文章,每章都会提供代码入口,让你更容易得入门和理解Spring AI 相关概念,直接节约你百分之六十的学习成本时间。

gorgor在码农 1067

常见排序算法及其对应的时间复杂度、空间复杂度

常见排序算法及其对应的时间复杂度、空间复杂度: 排序算法经过长时间演变,大体可以分为两类:内排序和外排序。在排序过程中,全部记录存放在内存,则成为内排序;如果排序过程中需要使用外存,则称为外排序,本文讲的都属于内排序。 内排序有可以分为以下几类: (1)插入排序:直接插入排序、二分法插入排序、希尔排序 (2)选择排序:直接选择排序、堆排序 (3)交换排序:冒泡排序、快速排序 (4)归并排序 (5)基数排序 一、插入排序 •思想:每步将一个待排序的...

YUBANGSHUANGYUER的博客 6797

基于扩散模型的图像去噪与修复:原理、实现与性能分析【附核心代码】

扩散模型(Diffusion Models)在图像修复、去噪、风格化、超分辨率等领域的应用,展示了其强大的生成能力和灵活性。通过模拟图像逐步加噪声再去噪的过程,扩散模型不仅能够恢复图像的细节,还能生成高质量的图像。本文详细探讨了扩散模型在图像修复和增强中的应用,并通过具体代码示例展示了如何使用扩散模型进行去噪、风格化、图像超分辨率等任务。扩散模型在图像修复中通过逐步去噪修复损坏的区域,在图像去噪中则能够去除图像中的噪声并保留细节;在图像风格化中,扩散模型通过结合目标风格和内容生成富有艺术性的图像;

一键难忘的博客 2931

简单选择排序,时间复杂度+空间复杂度+稳定性+亲测java代码

直接上代码,看注释就能懂 时间复杂度: 最优O(n^2), 最坏时间复杂度为 O(n^2) , 平均时间复杂度为O(n^2) 。 空间复杂度:O(1)。 不稳定 package sort; public class SimpleSelectSort { public static void simpleSelectSort(int array[]) { int temp = array[...

qq_42337368的博客 1718

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

[Java]插入排序(减治算法),希尔排序,选择排序,堆排序以及其时间,空间复杂度(带有排序思路及代码注释)

import java.util.ArrayList; import java.util.Arrays; public class sorts { //in-place 原地排序 public static void insertSort(int[] array) { //无序区间 [0,i] //有序区间 [i+1,array.length] ...

88_Rising 382

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

选择排序、冒泡排序 包括 代码 时间复杂度 空间复杂度 稳定性 是否能对代码进行提升

假设我们现在排序ar[]={1,2,3,4,5,6,7,8,10,9}这组数据,按照上面的排序方式,第一趟排序后将10和9交换已经有序,接下来的8趟排序就是多余的,什么也没做。所以我们可以在交换的地方加一个标记,如果那一趟排序没有交换元素,说明这组数据已经有序,不用再继续下去。最坏时间复杂度(逆序情况):o(n2)时间复杂度(有序情况):o(n)时间复杂度:o(n2)空间复杂度:o(1)

2202_75941514的博客 217

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

排序算法之简单选择排序

我们在上篇博客中复习了插入排序的相关知识,有了插入排序的基础理解今天的选择排序其实是很easy的。选择排序和冒泡排序是大学时期刚接触排序算法时接触的两种基础排序算法,因为近期打算把各类学过的以及没学过的排序算法都过一遍,所以今晚先把选择排序算法过一遍,之后有时间我会继续把冒泡排序算法过一下。 现在我们来看一下选择排序: 一.选择排序 1.1 原理 假设我们按照从小到大的顺序对数组排序,那么选择排序...

qq_36464947的博客 1862

冒泡,选择,插入,希尔排序

假设排升序,第一个数自然是有序的,第二个数与第一个数比较,如果比第一个数小就与其交换,然后看第三个数,此时前两个数是有序的,第三个数先于第二个数比较,比第二个数小就与其交换,再与第一个数比较,比第一个数小就与其交换,如果不比第二个数小就看第四个数,此时前三个数都是有序的以此类推。直接插入排序是和距离为1的元素比较,而希尔排序是和距离为gap的元素比较,gap不断变小,直到变为1,此时即是直接插入排序。当数据全都有序时,最快。从时间上讲,gap越大,大的数可以越快的到后面去,小的数可以越快的到前面去。

m0_68142120的博客 1451

【排序算法】简单选择排序及实例_C语言代码实现_Python代码实现

简单选择排序及实例 C语言代码实现 Python代码实现 简单选择排序 简单选择排序是选择排序的一种。 问:那么什么是选择排序? 答:每趟从待排序的记录中选出关键字最小的元素,顺序放在已排序的记录序列末尾,直到全部排序结束为止。 1 简单选择排序的思想与流程 从上文“什么是选择排序”,引申出简单选择排序的思想; ①从待排序数组元素中,找到值最小的元素; ②将值最小的元素与待排序数组元素的第一个元素互换; ③重复(元素个数-1轮次)①②,至此直到数组元素排序完成。 2 实例介

kt4ngw的博客 4254

【八大排序(二)】选择排序与堆排序

本篇文章主要介绍了选择排序,包括单向选择排序和双向选择排序,以及堆排序,希望同学们能够熟练掌握各种排序的时间复杂度,空间复杂度,和稳定性。

weixin_69049913的博客 1312

数据结构排序——选择排序与堆排序(c语言实现)

选择排序(Selection Sort):是一种简单直观的排序算法.它的基本思想是在未排序序列中找到最小(大)的元素,放到序列的起始位置,然后再从剩余未排序元素中找到最小(大)的元素,放到已排序序列的末尾。重复这个过程,直到所有元素都排好序。 之前在堆应用这篇文章我已经讲过了堆排序和TOP-K问题,详细可见:()[] 那这次就再次大致讲解一下 如果是升序,就建立大堆;是降序就建立小堆。 因为思路是(以升序为例):大堆的堆顶一定是最大的,我们就把堆顶与堆尾交换后,除去最后一个对新堆顶进行向下调整。完成后

qq_74415153的博客 1361

数据结构与算法:基于比较的排序算法:选择、冒泡、插入、归并的动图演示和java、python代码,排序时间复杂度、空间复杂度、稳定性总结表格

一个排序算法具有稳定性的意思是在排序相同值数据的前后,数据之间的相对顺序不变。譬如我现在有一个待排序列:3 3 1那么前两个3是值相等的,我们现在给这个待排序列打上标记:3① 3② 1排完序后这个序列依旧是3①在3②的左边,那么我们就称这个排序算法具有稳定性。目前在基于比较的排序算法中,没有找到时间复杂度为O(N*logN) ,空间复杂度为O(1),又稳定的排序。

shanshan的博客 1332

选择排序

选择排序 算法思想 选择排序是一种比较直观的排序算法,选择排序的工作原理是每次从待排序的数据中选择最小的数字放在当前位置,然后向前前进一个位置,把剩余数据的最小的数字放在现在的位置,依次类推,直到待排序的数据的数量为零。(升序的排列思想) 算法步骤: 设置当前位置的下标为最小的数字 在待排序的数据中,选择最小的下标(与当前设置最小数字作比较) 交换当前位置元素和最小下标的元素 数据位置向前进一步...

EngineerHe的博客 2436

选择排序(常见排序)【直接选择+双向选择+堆排】

以下例子均为 从小到大 排序。

weixin_60125979的博客 1106

排序算法之选择排序 (简单选择和堆排序)

选择排序讲解,堆排序复习。

m0_64770095的博客 724
上一篇: 冒泡排序代码及时间空间复杂度
下一篇: 插入排序代码及时间空间复杂度
defdsdddev
博客等级 码龄4年 439粉丝 314原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值