数据结构 (33)选择类排序

前言

        数据结构中的选择类排序主要包括简单选择排序(也称为选择排序)和堆排序。

一、简单选择排序

  1. 基本思想:简单选择排序是一种直观易懂的排序算法。它的工作原理是,在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

  2. 算法步骤

    • 初始化外层循环变量i为0,表示当前要排序的元素索引。
    • 初始化内层循环变量j为i+1,表示从当前元素的下一个元素开始比较。
    • 遍历剩余的元素(由j指示),找到最小的元素并记录其索引min。
    • 使用Swap函数交换当前元素(索引为i)和找到的最小元素(索引为min)的位置。
    • 外层循环继续,直到所有元素都排好序。
  3. 性能分析

    • 时间复杂度:简单选择排序的时间复杂度为O(n^2),其中n是待排序元素的个数。这是因为选择排序的基本操作是通过不断选择最小的元素并进行交换来完成排序,每一轮都需要进行n次比较。
    • 空间复杂度:简单选择排序是一种原地排序算法,只需要一个常量级的额外空间用于存储临时变量,即空间复杂度为O(1)。
    • 稳定性:简单选择排序是一种不稳定的排序算法。不稳定性意味着在排序过程中相等元素的相对位置可能发生变化。
  4. 使用场景:由于其简单性和不占用额外空间的特点,简单选择排序可以在一些特定场景下发挥作用,如小规模数据排序、固定长度数组排序以及简单应用场景中对排序算法的性能要求不高的情况。

二、堆排序

  1. 基本思想:堆排序是利用堆积树(堆)这种数据结构所设计的一种排序算法。它是通过堆来进行选择数据,排升序要建大堆,排降序建小堆。

  2. 算法步骤

    • 构建大顶堆:将待排序序列构造成一个大顶堆,此时整个数组的最大值就是堆结构的顶端。
    • 交换堆顶元素和末尾元素:将堆顶的元素(最大值)与末尾元素交换,并将堆的尺寸缩小1。
    • 调整堆:重新调整堆,使其满足堆的性质。
    • 重复上述步骤,直到堆的尺寸为1,此时数组已经有序。
  3. 性能分析

    • 时间复杂度:堆排序的时间复杂度为O(nlogn),其中n是待排序元素的个数。这是因为堆排序在构建堆和调整堆的过程中,每次都需要进行logn次比较和交换操作。
    • 空间复杂度:堆排序的空间复杂度为O(1),因为它是原地排序算法,不需要额外的辅助数组或链表。
    • 稳定性:堆排序是一种不稳定的排序算法,因为相同元素的相对顺序可能会改变。
  4. 使用场景:堆排序适用于大规模数据的排序,因为它具有较低的时间复杂度。同时,由于它是原地排序算法,不需要额外的辅助空间,因此在空间受限的情况下也具有较高的性能。

 结语   

奢侈是人为的贫穷

知足是天然的财富

!!!

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

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

相关文章

Kubernetes架构原则和对象设计(二)

云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes常见问题解答 本文从云计算架构发展入手,详细分析了kubernetes的生态系统、设计理念、分层架构、API设计…

自建服务器,数据安全有保障

在远程桌面工具的选择上,向日葵和TeamViewer功能强大,但都存在收费昂贵、依赖第三方服务器、数据隐私难以完全掌控等问题。相比之下,RustDesk 凭借开源免费、自建服务的特性脱颖而出!用户可以在自己的服务器上部署RustDesk服务端&…

发布Apache2.4** 局域网无法访问

1。 防火墙关闭 或者 设置入站规则 2,查看httpd.conf 文件 设置配置 原 Listen 80 修改成 Listen 192.168.31.127:90 3.确保 本地IP 是否正确

Flutter解压文件并解析数据

Flutter解压文件并解析数据 前言 在 Flutter 开发中,我们经常需要处理文件的读取和解压。 这在处理应用数据更新、安装包、存档文件等场景中尤为常见。 本文将介绍如何在Flutter中使用archive插件来解压文件并解析数据。 准备 在开始之前,我们需要…

HiveSQL题——炸裂函数(explodeposexplode)

目录 一、炸裂函数的知识点 1.1?炸裂函数 ?explode? posexplode 1.2 lateral view 侧写视图 二、实际案例 2.1 每个学生及其成绩 0 问题描述 1 数据准备 2 数据分析 3 小结 2.2?日期交叉问题 0 问题描述 1 数据准备 2 数据分析 3 小结 2.3?用户消费金额 …

从差分电容到多轴测量:解读 BendLabs 柔性弯曲传感器核心技术

BendLabs是一家技术公司,致力于通过灵活的软传感解决方案将运动测量和理解带给世界。BendLabs柔性弯曲传感器由医用级有机硅制成,能够满足精确、多轴、柔软、灵活的传感需求。BendLabs柔性弯曲传感器采用差分电容原理,具有高精度、低功耗、无…

【数字电路与逻辑设计】实验二 数值比较器

文章总览:YuanDaiMa2048博客文章总览 【数字电路与逻辑设计】实验二 数值比较器 一、实验内容二、设计过程(一)真值表(二)设计思路 三、源代码(一)代码说明:(二&#xff…

39 vector深入理解 · 迭代器失效深度浅拷贝

目录 一、迭代器失效 (一)外部迭代器失效 1、扩容引起的野指针问题 2、删除引起的逻辑问题 二、深度浅拷贝 一、迭代器失效 迭代器可以理解为像指针一样的类对象,但不要一味地认为迭代器就是指针,指针可以实现迭代器&#xff…

2024年认证杯SPSSPRO杯数学建模C题(第一阶段)云中的海盐解题全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 C题 云中的海盐 原题再现: 巴黎气候协定提出的目标是:在2100年前,把全球平均气温相对于工业革命以前的气温升幅控制在不超过2摄氏度的水平,并为1.5摄氏度而努力。但事实上,许多之前的…

AI智能体Prompt预设词指令大全+GPTs应用使用

AI智能体使用指南 直接复制在AI工具助手中使用(提问前) 可前往SparkAi系统用户官网进行直接使用 SparkAI系统介绍文档:Docs 常见AI智能体GPTs应用大全在线使用 自定义添加制作AI智能体进行使用: 文章润色器 你是一位具有敏锐洞察…

Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理-方法二

1.先导入数据到origin 2.导入文件的时候注意:名字短的这个是,或者你打开后看哪个里面有800,因为我的激光重频是1.25Hz(应该是,不太确定单位是KHz还是MHz),所以对应的时间是800s。 3.选中两列直接…

Mybatis框架进阶(标签)

1. <if>标签 DROP DATABASE IF EXISTS mybatis_test; CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4; use mybatis_test;DROP TABLE IF EXISTS user_info; CREATE TABLE user_info (id INT ( 11 ) NOT NULL AUTO_INCREMENT,username VARCHAR ( 127 ) NOT…

【知识点】图与图论入门

何为图论 见名知意&#xff0c;图论 (Graph Theory) 就是研究 图 (Graph) 的数学理论和方法。图是一种抽象的数据结构&#xff0c;由 节点 (Node) 和 连接这些节点的 边 (Edge) 组成。图论在计算机科学、网络分析、物流、社会网络分析等领域有广泛的应用。 如下&#xff0c;这…

泷羽sec-burp(4)burp常见用法 以及 漏洞测试理论 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

Linux上传代码的步骤与注意事项

最近因为工作需要&#xff0c;要上传代码到 DPDK 上&#xff0c;代码已经上传成功&#xff0c;记录一下过程&#xff0c;给大家提供一个参考。我这次需要上传的是pmd&#xff0c;即poll mode driver。 1 Coding Style 要上传代码&#xff0c;第一件事就是需要知道Coding Styl…

vllm0.5.0的v1/completions各参数说明

一、调用示例 curl -X POST \http://ip:8001/v1/completions \-H accept: application/json \-H Content-Type: application/json \-d {"model": "qwen-api","prompt": ["讲个中文笑话"],"best_of": 1,"n": 1,&qu…

Java项目实战II基于微信小程序的作品集展示(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着移动互联网技术的飞速…

物联网入门-Arduino的下载与配置教程(以ESP32为例)-2024

教程介绍 本次教程主要讲述如何下载与配置Arduino&#xff0c;以及开发版对应驱动的下载安装 原文链接&#xff1a;物联网入门-Arduino的下载与配置教程(以ESP32为例)-2024 步骤概述 1&#xff1a;下载Arduino 2&#xff1a;安装Arduino 3&#xff1a;下载安装驱动 4&am…

13.在 Vue 3 中使用OpenLayers加载鹰眼控件示例教程

在 WebGIS 开发中&#xff0c;鹰眼控件 是一个常用的功能&#xff0c;它可以为用户提供当前地图位置的概览&#xff0c;帮助更好地定位和导航。在本文中&#xff0c;我们将基于 Vue 3 的 Composition API 和 OpenLayers&#xff0c;创建一个简单的鹰眼控件示例。 效果预览 在最…

Flink如何基于数据版本使用最新离线数据

业务场景 假设批量有一张商户表&#xff0c;表字段中有商户名称和商户分类两个字段。 批量需要将最新的商户名称和分类的映射关系推到hbase供实时使用。 原实现方案 a.原方案内容 为解决批量晚批问题&#xff0c;批量推送hbase表时一份数据产生两类rowkey&#xff1a;T-1和…