数据结构进阶篇 之【选择排序】详细讲解(选择排序,堆排序)

在这里插入图片描述
民以食为天,我以乐为先
嘴上来的嘘寒问暖,不如直接打笔巨款

一、选择排序

1.直接选择排序

1.1 基本思想

1.2 实现原理

1.3 代码实现

1.4 直接选择排序的特性总结

2.堆排序

跳转链接:数据结构 之 堆的应用

二、完结撒❀

–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–

一、选择排序

1.直接选择排序

1.1 基本思想

original版(原始版):

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

optimize版(优化版):

每一次从待排序的数据元素中选出最小和最大的两个元素,分别存放在序列的起始位置和队尾位置,直到全部待排序的数据元素排完。

1.2 实现原理

这里我们讲解optimize版

在元素集合array[0]–array[n-1]中选择值最大和值小的数据元素

若最大值不是这组元素中的最后一个元素,则将它与这组元素中的最后一个元素交换,若最小值不是这组元素中的第一个元素,则将它与这组元素中的第一个元素进行交换

在剩余的array[1]–array[n-2]集合中,重复上述步骤,直到集合剩余1个元素或2个元素

因为我们完成一次循环后就可以将数组开头下标加1,结尾下标减一,所以我们需要记录下标实现交换

这里直接说明,按照上述逻辑执行到数组中剩下两个元素的时候可能会出现BUG,当剩下两个下标对应值不符合逻辑时会相互进行两次交换,但这时只进行一次交换就足够

动态图解:
在这里插入图片描述

1.3 代码实现

//选择排序 同时选出最大和最小的两个数据
void SelectSort(int* a, int n)
{int begin = 0;int end = n - 1;while (begin<end){int mini = begin, maxi = begin;//选出最大和最小值for (int i = begin + 1; i <= end; i++){if (a[i] < a[mini]){mini = i;}if (a[i] > a[maxi]){maxi = i;}}Swap(&a[begin], &a[mini]);if (begin == maxi)//!!!{maxi = mini;}Swap(&a[end], &a[maxi]);++begin;--end;}
}

1.4 直接选择排序的特性总结

1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用

2. 时间复杂度:O(N^2)

3. 空间复杂度:O(1)

4. 稳定性:不稳定

2.堆排序

跳转链接:数据结构 之 堆的应用
堆排序我之前博客有讲大家直接跳转学习即可

二、完结撒❀

如果以上内容对你有帮助不妨点赞支持一下,以后还会分享更多编程知识,我们一起进步。
最后我想讲的是,据说点赞的都能找到漂亮女朋友❤
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美摄科技AI智能图像矫正解决方案

图像已经成为了企业传播信息、展示产品的重要媒介&#xff0c;在日常拍摄过程中&#xff0c;由于摄影技巧的限制和拍摄环境的复杂多变&#xff0c;许多企业面临着图像内容倾斜、构图效果不佳等挑战&#xff0c;这无疑给企业的形象展示和信息传递带来了不小的困扰。 美摄科技深…

SF授权系统源码 全开源无加密5.2版本

预览 介绍 SF多应用综合验证系统是一款基于 ThinkPHP V6.0.9 和 EasyWeb iframe开发的系统&#xff0c;帮助开发者快速为自己的项目增加授权验证。傻瓜式一键安装系统&#xff0c;轻松几步即可完成软件对接&#xff0c;为软件提供用户注册登陆、软件收费授权、软件更新、等一系…

中国Shokz韶音 小小耳机中的大国创新

近日下午&#xff0c;太空出差三人组直播课上新了&#xff01;全球的学生们通过网络收看了“天宫课堂”第二课&#xff0c;航天员翟志刚、王亚平、叶光富相互配合&#xff0c;在微重力环境下做了大量演示&#xff0c;并进行了天地互动问答。 眼尖的朋友应该看出来了&#xff0c…

磁盘如何分配数据数据

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 磁盘如何分配数据 数据切割&#xff1a; 按照固定长度进行切割---》编码翻译&#xff08;常用&#xff09; 计算机要求按照8bit(字节)进…

vscode连接服务器步骤

一 、下载vscode 下载vscode 在官网&#xff08;https://code.visualstudio.com/&#xff09;下载VsCode安装vscode 放到自己想安装的盘&#xff0c;最好不要C盘安装中文插件 安装完成后后下角会有提示说重启&#xff0c;点击重启就行。 4. 设置自动保存 点击右上角的文件—…

VMware-16.0配置虚拟机网络模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、为什么要配置网络&#xff1f;二、配置步骤1.检查VMware服务2.进入配置页面3.添加网络模式1.Bridge2.NAT3.Host-only 4.DHCP租约5.静态IP 三、使用总结 前言…

Flutter应用发布前的关键iOS设备测试策略

本文探讨了使用Flutter开发的iOS应用能否上架&#xff0c;以及上架的具体流程。苹果提供了App Store作为正式上架渠道&#xff0c;同时也有TestFlight供开发者进行内测。合规并通过审核后&#xff0c;Flutter应用可以顺利上架。但上架过程可能存在一些挑战&#xff0c;因此可能…

Java解析实体类的属性和属性注释

前言 获取某个类的属性&#xff08;字段&#xff09;是我们经常都会碰到的&#xff0c;通常我们是通过反射来获取的。 但是有些特殊情况下&#xff0c;我们不仅要获取类的属性&#xff0c;还需要获取属性注释。这种情况下&#xff0c;我们只能通过注解去获取注释。可以自己定…

系列学习前端之第 8 章:一文掌握 Vue2(核心基础篇)

1、 Vue简介 1.1 简介 Vue 是动态构建用户界面的渐进式 JavaScript 框架&#xff0c;Vue 只关注视图层&#xff0c; 采用自底向上增量开发的设计。采用组件化模式&#xff0c;提高代码复用率、且让代码更好维护。借鉴 Angular 的模板和数据绑定技术声明式编码&#xff0c;让编…

大话设计模式之抽象工厂模式

抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种方式来创建一系列相关或依赖对象的家族&#xff0c;而无需指定其具体类。该模式通过提供一个抽象工厂接口&#xff0c;定义了一组可以创建不同类型对象的方法&#…

水泥设备如何实现物联网远程监控?

水泥设备如何实现物联网远程监控&#xff1f; 在当今的工业4.0时代&#xff0c;水泥行业正在经历一场深度的技术革新&#xff0c;其中构建智慧工厂并采用物联网远程监控解决方案成为了提升生产效率、保障产品质量、实现节能减排的关键路径。该方案通过集成先进的信息技术、物联…

StreamingT2V文本生成视频多模态大模型,即将开源!

1、前言 Picsart人工智能研究所、德克萨斯大学和SHI实验室的研究人员联合推出了StreamingT2V视频模型。通过文本就能直接生成2分钟、1分钟等不同时间&#xff0c;动作一致、连贯、没有卡顿的高质量视频。 虽然StreamingT2V在视频质量、多元化等还无法与Sora媲美&#xff0c;但…