选择排序

【数据结构】选择排序—直接选择排序、树形选择排序 选择排序的主要思想是每一趟从待排序列中选取一个关键字值最小的记录,也即第1趟从n个记录中选取关键字最小的记录,在第2趟中,从剩下的n-1个记录中选取关键字值最小的记录,直到整个序列中的记录都选完位置。 阅读详情

我个人认为冒泡排序和选择排序真是一对孪生兄弟,因为我总感觉这两个算法的思想很像,时间复杂度也相同。但其实他们的算法思想是不同的。

冒泡排序是从前往后逐个比较相邻的元素,从而使得最大的元素”冒”到数组的最右边。
而选择排序则是将某一个元素与其余所有元素相比较,选出一个最小/最大的元素放在当前位置。
代码如下:

template<typename T>
void SelectSort(vector<T>& v)
{
    if(v.size()<=1)
        return;
    int length=v.size();
    int i,j;
    for(i=0;i<length;++i)
    {
        for(j=i+1;j<length;++j)
        {
            if(-1==compair(v[j],v[i]))
            {
                swap(v[j],v[i]);
            }
        }
    }
}

在这里说过,”所有基于位置的比较排序的时间复杂度都逃不了O(n2)的厄运”,所以选择排序的时间复杂度同样也是O(n2)。

同样来看看可以改进的地方:
改进一:如果一趟排序中没有进行交换,则表明排序完成。具体算法再冒泡排序中说过,再次不在表述。

改进二:在每一趟排序中进行双向选择。
代码如下:

template<typename T>
void SelectSort(vector<T>& v)
{
    if(v.size()<=1)
        return;
    int length=v.size();
    int i,j;
    for(i=0;i<length;++i)
    {
        for(j=i+1;j<length-i;++j)
        {
            int ma=max(v,i,j,length-i-1);
            int mi=min(v,i,j,length-i-1);
            swap(v[i],v[mi]);
            if(1==compair(v[ma],v[length-i-1]))
                swap(v[length-i-1],v[ma]);
        }
    }
}

以上

如果你有任何想法或是可以改进的地方,欢迎和我交流!

完整代码及测试用例在github上:点我前往

本文首发于www.sbrave.cn

【完】

排序算法之 选择排序 选择排序   选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。   常用的选择排序方法有简单选择排序和堆排序。 简单选择排序 在介绍选择排序算法前,我们再回顾下冒泡算法。 冒泡算法是通过两两比较,不断交换,逐个推进的方式,来进行排序的。 一次遍历,得...... 阅读详情

相关推荐

冒泡排序.smart

项目上均时启用设备,写的冒泡排序子程序,西门子S7-200smart冒泡排序子程序,适用均时运行设备,程序是Dint类型排序,可自行修改Real类型等。

排序算法(二) 选择排序和堆排序

排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

m0_73633144的博客 1219

拆解维修指南:当你的大扭矩电动扳手‘罢工’,如何自己动手排查行星齿轮与谐波传动故障?

本文详细解析了大扭矩电动扳手行星齿轮与谐波传动故障的排查与修复方法。从故障初判、拆解工艺到行星齿轮系统检测、谐波传动维护,提供了一套完整的维修指南,帮助用户快速诊断和解决常见问题,延长工具使用寿命。

weixin_42525582的博客 435

八种排序方法(一)——选择排序

编译器:Xcode 编程语言:C++ 选择排序的基本思想: 每一趟在n-i+1(i=1,2,3…,n-1)个记录中选取关键字最小的记录与第i个记录交换,并作为有序序列中的第i个记录。 例如: 待排序列: 43,65,4,23,6,98,2,65,7,79 第一趟: 2,65,4,23,6,98,43,65,7,79 第二趟: 2,4,65,23,6,98,43,65,7,79 第三趟

Wang.T的博客 5万+

Outlook邮件规则实战:从自动化分类到GTD工作流整合

在信息过载的数字化办公环境中,自动化处理技术成为提升效率的关键。其核心原理是基于“条件-动作”的触发器模型,通过预设逻辑让系统自动执行重复性任务。这种自动化机制的技术价值在于将用户从繁琐的机械操作中解放出来,实现信息流的智能管控。在邮件管理这一典型应用场景中,自动化规则能精准处理项目邮件聚合、优先级分流等复杂需求。本文聚焦于微软Outlook的规则引擎,深入解析如何利用**规则引擎**和**触发器模型**构建高效的邮件处理系统,并进一步将其融入GTD(Getting Things Done)个人生产力框架,

weixin_31083901的博客 313

全球最大光伏电池缺陷异常检测数据集PVELAD【发布】

下载地址 1:GitHub - binyisu/PVEL-AD 下载地址 2:http://aihebut.com/col.jsp?id=118 下载地址 3:NAVEDownload 竞赛测试系统:Photovoltaic cell anomaly detection | Kaggle 一、简介 PVEL-AD 数据集又叫做EL2021数据集是用于对光伏电池异常缺陷检测方法进行基准测试的数据集,重点是光伏电池工业检测。PVEL-AD包含 36,543 张具有各种内部缺陷和异构背...

苏打水的杯子的博客 2万+

五类排序算法(插入,交换,选择,归并)

五种排序方法 插入排序 直接插入排序 希尔排序 交换排序 冒泡排序 快速排序 选择排序 简单选择排序 堆排序 归并排序 分类排序 排序方法基本思想和算法描述 直接插入排序/冒泡排序/简单选择排序,这些简单算法所需时间复杂度大为O(n^2). 希尔排序/快速排序/堆排序/归并排序,这些较复杂算法的时间复杂度,平均情况下位O(nlog2n),有些最快情况下退化成O(n^2).

biezhihua的专栏 1万+

海洋捕食者算法(MPA)详解:从海洋生态智慧到高性能优化

摘要: 海洋捕食者算法(MPA)是一种基于海洋生态觅食行为的元启发式优化算法,模拟捕食者(如鲨鱼)的布朗运动和莱维飞行策略进行全局与局部搜索。算法分为三阶段:高速比阶段(全局探索)、单位速度比阶段(平衡搜索)和低速比阶段(局部开发),通过精英矩阵和FADs效应(概率扰动)避免早熟收敛。MPA具有参数少、收敛快、寻优能力强等特点,适用于复杂优化问题,其数学模型将生物行为转化为随机游走与自适应策略,并通过收敛因子动态调整探索-开发平衡。实验表明,MPA在多个基准问题上表现优异。

qq_42212808的博客 273

排序算法的分类及如何选择

一.排序的分类1、 根据待排序的数据大小不同,使得排序过程中所涉及的存储器不同,可分为: 内部排序 外部排序 2、 排序关键字可能出现重复,根据重复关键字的排序情况可分为: 稳定排序 不稳定排序 3、 对于内部排序,依据不同的排序原则,可分为: 插入排序 交换(快速)排序 选择排序 归并排序 计数排序 4、 针对内部排序所需的工作量划分,可分为: 简单排序 O(n^2

哒哒的博客 7876

无限泛化!AI背景文字识别,腾讯文字六宫格

本文介绍了生成大规模文字验证码数据集的方法,通过使用上百种字体和2万+字库,结合随机背景和数十种图像增强技术,生成了2000万+的多样化样本。该方法采用二阶段训练策略,确保模型对字体、形态、形变等具有强泛化能力,可适配腾讯、咸鱼等多种平台的文字验证码识别,包括生僻字和复杂形变情况。生成的模型在多种验证码场景下表现优异,但强调该方法仅用于技术研究,严禁非法用途。

码王吴彦祖的博客 563

Stanford Dogs 犬类识别实战:基于 YOLOv8 的 120 类目标检测与图形界面实现

本项目通过YOLOv8实现了Stanford Dogs数据集的目标检测功能,完整包含了数据准备、模型训练、检测推理、图形界面四大模块。初学者使用YOLOv8n(nano版)加速训练,熟悉流程后可切换到YOLOv8s/m。图像上传与检测可进一步增强,例如显示识别框、标注标签。可以添加模型选择、检测阈值调整等功能,提升实用性。通过网盘分享的文件:基于yolov8的狗类品种识别系统链接: https://pan.baidu.com/s/1UYV4h2WnK1RxWWKoPrS-RA?

FJN110的博客 84

排序——选择排序

前面的文章介绍了排序的概念,插入排序和交换排序,这篇文章则介绍一下选择排序的相关内容。

Blusher1的博客 2656

Windows11安装配置openclaw+deepseek(大龙虾)

密码可以随便设置(注意wsl系统本质上是linux系统,设置密码系统是不会像windows一样显示*点位符的),输入密码后敲回车再次输入密码,输入后敲回车。如果不小心关闭这个界面,可以再次进入powershell,输入wsl进行系统。在powershell中输入:curl -fssL https://openclaw.ai/install.sh | bash。下面是否通过第3方平台和openclaw交互,我选择j最后一项:skip for now。到下面这一步,可以通过键盘的左箭头选择Yes.

mahailiang的专栏 344

排序算法:选择排序(直接选择排序、堆排序)

使用C语言实现的选择排序算法和堆排序算法,详细讲解了选择排序的实现逻辑,包含两个排序算法的完整代码,以及两个算法的效率比较。

Yikefore的博客 4249

SAP ABAP Append structure 介绍

所有在 append structure 上增强的字段都是 append structure 的一部分,这意味着对这些增强所做的任何更改仅仅施加在 append structure 上,而不会影响被增强的 ABAP DDIC 结构。这同样适用于 transport. 激活数据库表或结构时,会找到所有关联的 append structure,并将它们的组件附加到数据库表或结构。Append structure(附加结构)是 ABAP 字典中附加到另一个结构或数据库表并将其组件附加到它们的结构。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1165

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

选择排序(选择排序,堆排序)

两种选择排序!

qq_52777887的博客 2189

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

选择类排序法 — 简单选择排序

9.4 选择类排序法 选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。我们主要介绍简单选择排序、树型选择排序和堆排序。    简单选择排序 简单选择排序的基本思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止

Rprop 2万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

选择排序之简单选择排序

选择排序的原理:选择排序的主要操作是选择,主要思想:每趟排序在待排序序列中选择最小的元素记录,添加到有序序列中。选择排序主要有简单选择排序(直接选择排序)和堆排序,堆排序算法可以看作是简单选择排序算法的改进;这里主要介绍简单选择排序算法。...

m0_64529905的博客 3060

选择排序 简单选择排序 直接选择排序的区别

选择排序 图示过程如下:

weixin_40976389的博客 6512

排序之选择排序

一、直接选择排序 原理: 每一次从无序区间选出最大(或最小)的一个元素,存放在无序区间的最后(或最前),直到全部待排序的数据元素排完 。 代码实现: public void selectSort(int[] arr) { for(int i = 0;i < arr.length;i++) { int maxPos = 0; fo...

Sl_4397的博客 788

简单选择排序与直接选择排序

是对元素直接排序 而先获取到元素的最大值或最小值下标再进行交换每次遇到n-1>n 的时候就要发生交换;则只是记录下较大那个元素的位置,这样一轮过后这个记录变身本轮所要选取的最大值,而每轮需要确定的位置已由外层循环确定,只需将最大元素位置记录所对应的元素与要确定的位置交换机可。话不多说直接上代码演示。

orehrepuS的博客 3882

选择排序和二元选择排序

选择排序 思想: 在一个数组中,找到最小的数放在最前面,然后再在剩下的数中找到最小的放到第二位....以此类推 代码实现: #include<iostream> using namespace std; void swap(int& x, int& y)//交换函数 { int temp = 0; temp = x; x = y; y = temp; } v...

承泓风的博客 744

选择排序——二元选择排序

二元选择排序 核心思想: 选择一个当前位置i,从开始到序列一半位置。每次遍历产生一个最大值,一个最小值。 将产生的最小值和最大值分别与当前位置i和序列长度-i上的元素交换 时间复杂度: O(n^2) 适用场景: 适用于简单选择排序的适用的场所,且为简单选择排序的升级版,时间快一半左右 稳定性: 不稳定(因为选取后面最小的和前面交换,前面的元素可能被交换到相同元素的后面,最大元素交换也...

Y734493585的博客 1779

选择排序(简单选择排序和堆排序)

选择排序的基本思想:每一趟(例如第i趟)在后面n-i+1(i=1,2,…n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下了1个,就不用再选了。 1.简单选择排序 简单排序算法思想:假设排序表为L[1…n],第i趟排序即从L[i…n]中选择关键字最小的元素与L(i)交换,每一趟排序可以确定一个元素的最终位置,这样经过n-1趟排序就可以使得整个排序表有序。代码如下: #include<cstdio> #include<iostream

xiaoyong5854的博客 1425

python选择排序_Python选择排序

python选择排序Here you’ll learn about python selection sort algorithm with program example. 在这里,您将通过程序示例了解python选择排序算法。 Selection sort is one of the easiest sorting algorithm out there. In Selection sor...

culing2941的博客 1815
上一篇: 求给定数组的最大子数组
下一篇: 冒泡排序
SmartBrave
博客等级 码龄12年 25粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值