八大排序(三)--------简单选择排序

news2024/11/18 15:35:51

本专栏内容为:八大排序汇总 通过本专栏的深入学习,你可以了解并掌握八大排序以及相关的排序算法。

💓博主csdn个人主页:小小unicorn
⏩专栏分类:八大排序汇总
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

在这里插入图片描述
前言:
爱炒股票短线的人,总是喜欢不断地买进卖出,想通过价差来实现盈利。但通常这种频繁操作的人,即使失误不多,也会因为操作的手续费和印花税过高而获利很少。

还有一种做股票的人,他们很少出手,只是在不断地观察和判断,等到时机一到,果断买进或卖出。他们因为冷静和沉着,以及交易的次数少,而最终收益颇丰。

冒泡排序的思想就是不断地在交换,通过交换完成最终的排序,这和做股票短线频繁操作的人是类似的。我们可不可以像只有在时机非常明确到来时才出手的股票高手一样,也就是在排序时找到合适的关键字再做交换,并且只移动一次就完成相应关键字的排序定位工作呢?这就是选择排序法的初步思想。

选择排序的基本思想是每一趟在n-i+1(i=1,2,…,n-1)个记录中选取关键字最小的记录作为有序序列的第个记录。我们这里先介绍的是简单选择排序法。

简单选择排序算法

  • 简单选择排序算法
  • 简单选择排序复杂度分析

在这里插入图片描述

简单选择排序算法

简单选择排序法(Simple Selection Sort)就是通过n -i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第(1<=i<=n)个记录交换.

注意:排序用到的结构与函数在第一部分:排序的基本概念与分类。我们已经实现。详情请点击:八大排序(一)--------排序的基本概念与分类
我们来看代码:

void Selectsort(SqList*L)
{

    int i, j, min;
    for (i = 1; i <= L->length; i++)
    {
        min = i;/*将当前下标定义为最小值下标 */
        for (j = i+1; j <= L->length; j++)/* 循环之后的数据 */
        {
            if (L->r[min] > L->r[j])/* 如果有小于当前最小值的关键字 */
                min = j;/* 将此关键字的下标赋值给min */
        }
        if (i != min)/*若min不等于i,说明找到最小值,交换 */
        {
            swap(L, i, min);/*交换L->r[i]与L->r[min]的值 */
        }
    }
}

代码应该说不难理解,针对待排序的关键字序列是{9,1,5,8,3,7,4,6,2},对i从1循环到8。
当i=1时,L.r[i]=9,min开始是1,然后与j=2到9比较L.r[min]与L.r[j]的大小,因为j=2时最小,所以min=2。最终交换了L.r[2]与L.r[1]的值。如下图所示,注意,这里比较了8次,却只交换数据操作一次。
在这里插入图片描述

当i2时,L.r[i]=9,min开始是2,经过比较后,min=9,交换L.r[min]与L.r[i]的值。如下图所示,这样就找到了第2位置的关键字。
在这里插入图片描述

当i=3时,L.r[i]=5,min开始是3,经过比较后,min=5,交换L.r[min]与L.r[i]的值。如下图所示。
在这里插入图片描述

之后的数据比较和交换完全雷同,最多经过8次交换,就可完成排序工作。

简单选择排序复杂度分析

从简单选择排序的过程来看,它最大的特点就是交换移动数据次数相当少,这样也就节约了相应的时间。

分析它的时间复杂度发现,无论最好最差的情况,其比较次数都是一样的多,第i趟排序需要进行n-i次关键字的比较,因而需要比较 ∑ i = 2 n ( n − i ) = n + n − 1 + . . . + 2 = n ( n − 1 ) / 2 \sum_{i=2}^n (n-i)=n+n-1+...+2=n(n-1)/2 i=2n(ni)=n+n1+...+2=n(n1)/2次。

而对于交换次数而言,当最好的时候,交换为0次,最差的时候,也就初始降序时,交换次数为n-1次,基于最终的排序时间是比较与交换的次数总和,因此,总的时间复杂度依然为O(n2)。

应该说,尽管与冒泡排序同为O(n2),但简单选择排序的性能上还是要略优于冒泡排序。

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

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

相关文章

我写的最蠢的代码

链接 就问你怎么样吧。。。。。。

云计算(Docker)

Docker简介 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言&#xff0c;并遵从 Apache2.0 协议开源。它可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。Docker 可用于开发…

Gateway学习和源码解析

文章目录 什么是网关&#xff1f;搭建实验项目demo-servicegateway-service尝试简单上手 路由&#xff08;Route&#xff09;断言&#xff08;Predicate&#xff09;和断言工厂&#xff08;Predicate Factory&#xff09;gateway自带的断言工厂After&#xff08;请求必须在某个…

概率论与数理统计(第一章 概率论的基本概念)

文章目录 第一章 概率论的基本概念一、随机试验二、事件的概率 第一章 概率论的基本概念 一、随机试验 随机试验特点&#xff1a; ①可以在相同的条件下重复进行 ②每次试验的可能结果不止一个&#xff0c;并且能提前预测所有的可能结果 ③在未进行试验前不知道哪一个结果会出…

抖音SEO源码

抖音短视频seo矩阵系统源码是一种用于优化抖音视频内容的工具&#xff0c;可以帮助用户提高抖音视频的搜索排名和流量&#xff0c;从而增加视频曝光和转化率。该系统包括两部分&#xff0c;即数据收集和分析模块以及SEO策略和实施模块。 数据收集和分析模块主要负责从抖音平台…

MySQL进阶 —— 超详细操作演示!!!(中)

MySQL进阶 —— 超详细操作演示&#xff01;&#xff01;&#xff01;&#xff08;中&#xff09; 三、SQL 优化3.1 插入数据3.2 主键优化3.3 order by 优化3.4 group by 优化3.5 limit 优化3.6 count 优化3.7 update 优化 四、视图/存储过程/触发器4.1 视图4.2 存储过程4.3 存…

爬虫实践-豆瓣读书Top250

爬虫学习与实践 一、爬虫介绍二、爬虫原理TCP3次握手&#xff0c;4次挥手过程 三、页面解析之数据提取四、正则表达式五、实践1. 抓取百度贴吧2. 拉钩招聘网 六、 进阶版 一、爬虫介绍 网络爬虫&#xff0c;其实叫作网络数据采集更容易理解。就是通过编程向网络服务器请求数据…

MasterAlign相机参数设置-增益调节

相机参数设置-曝光时间调节操作说明 相机参数的设置对于获取清晰、准确的图像至关重要。曝光时间是其中一个关键参数&#xff0c;它直接影响图像的亮度和清晰度。以下是关于曝光时间调节的详细操作步骤&#xff0c;以帮助您轻松进行设置。 步骤一&#xff1a;登录系统 首先&…

JumpServer存在未授权访问漏洞(CVE-2023-42442) 附POC

文章目录 JumpServer存在未授权访问漏洞&#xff08;CVE-2023-42442&#xff09;CVE-2023-42442 附POC1. JumpServer简介2.漏洞描述3.影响版本4.fofa查询语句5.漏洞复现6.POC&EXP7.整改意见8.往期回顾 JumpServer存在未授权访问漏洞&#xff08;CVE-2023-42442&#xff09;…

[补题记录] Atcoder Beginner Contest 300(E)

URL&#xff1a;https://atcoder.jp/contests/abc300 目录 E Problem/题意 Thought/思路 Code/代码 E Problem/题意 给一个 N&#xff0c;然后投色子&#xff0c;筛到每个数&#xff08;即 1 - 6&#xff09;的概率均等&#xff0c;把所筛到的数一个个相乘&#xff0c;直…

SSRF攻击(服务端请求伪造)

1.SSRF(服务端请求伪造)原理 概念&#xff1a;是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF是要目标网站的内部系统。&#xff08;因为他是从内部系统访问的&#xff0c;所有可以通过它攻击外网无法访问的内部系统&#xff0c;也就是把目…

CTF学习路线!最详细没有之一!(建议收藏)

一、CTF入门 最近很多朋友在后台私信我&#xff0c;问应该怎么入门CTF。 个人认为入门CTF之前大家应该先了解到底什么是CTF&#xff0c;而你学CTF的目的又到底是什么; 其次便是最好具备相应的编程能力&#xff0c;若是完全不具备这些能力极有可能直接被劝退。 毕竟比赛的时…

百望云获评ITShare数智未来创新峰会“年度数字化优秀服务商”大奖

近日&#xff0c;百望云应邀出席“新能源-新制造暨汽车数智未来创新峰会”&#xff0c;凭借在数字化领域优秀的服务能力和丰富的落地成果&#xff0c;成功获评“年度数字化优秀服务商”&#xff0c;这也是市场对百望云在赋能企业数字化转型和产品创新领域的再度认可&#xff01…

微信小程序之项目基本结构、页面的基础及宿主环境

文章目录 前言一、基本组成结构基本组成小程序页面的组成部分JSON配置文件作用 二、页面基础pagesWXML和HTML的区别WXSS和CSS的区别小程序中js文件分类 三、小程序宿主环境总结 前言 微信小程序的项目基本结构、页面的基础及宿主环境 一、基本组成结构 基本组成 新建一个微信…

在“百模大战”重生,搜索引擎又行了?

文丨智能相对论 作者丨沈浪 “我想让人们知道&#xff0c;是我们&#xff08;微软&#xff09;让他们&#xff08;谷歌&#xff09;‘跳舞’。” 当加入ChatGPT功能的新一代Bing上线&#xff0c;微软CEO纳德拉就已经按耐不住向谷歌发起了挑战。他认为加入新一代人工智能对搜…

Qt核心:元对象系统、属性系统、对象树、信号槽

一、元对象系统 1、Qt 的元对象系统提供的功能有&#xff1a;对象间通信的信号和槽机制、运行时类型信息和动态属性系统等。 2、元对象系统是 Qt 对原有的 C进行的一些扩展&#xff0c;主要是为实现信号和槽机制而引入的&#xff0c; 信号和槽机制是 Qt 的核心特征。 3、要使…

摩尔信使MThings实用功能盘点

“冗长的用户手册”与“精简的交互设计”之间势必产生一条信息鸿沟&#xff0c;现在就来盘点一下摩尔信使MThings有哪些隐蔽而实用的功能。 01 数据配置类 一键刷新 功能&#xff1a;快速读取所有位数据、寄存器数据的当前数值。 操作&#xff1a;双击“数值”列表头。 一键…

【MySQL】 MySQL的增删改查(进阶)--贰

文章目录 &#x1f6eb;新增&#x1f6ec;查询&#x1f334;聚合查询&#x1f6a9;聚合函数&#x1f388;GROUP BY子句&#x1f4cc;HAVING &#x1f38b;联合查询⚾内连接⚽外连接&#x1f9ed;自连接&#x1f3c0;子查询&#x1f3a1;合并查询 &#x1f3a8;MySQL的增删改查(…

关于JPA +SpringBoot 遇到的一些问题及解决方法

关于JPA SpringBoot 遇到的一些问题及解决方法 一、JpaRepository相关 1.1 org.springframework.dao.InvalidDataAccessResourceUsageException: Named parameter not bound : id; nested exception is org.hibernate.QueryException: Named parameter not bound : id可以…

MobileViT论文记录

论文原文&#xff1a;https://arxiv.org/abs/2110.02178 源码地址&#xff08;pytorch实现&#xff09;&#xff1a;https://github.com/apple/ml-cvnets 前言 MobileVit是由CNN和Transformer混合架构组成的&#xff0c;它利用了CNN的空间归纳偏置[1]和加速网络收敛的优势&a…