排序算法(总结)-C++

篇幅较长请耐心看完

C++ 中实现排序算法有多种方式,这些算法各有优缺点,适用于不同的场景。以下是一些经典的排序算法及其简要说明和C++代码实现的概述:

冒泡排序 ( B u b b l e S o r t Bubble Sort BubbleSort)

• 原理:通过重复遍历要排序的数列,比较每对相邻元素的值,如果顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
• 复杂度:平均时间复杂度 O ( n 2 ) O(n^2) O(n2),最好情况 O ( n ) O(n) O(n),最坏情况 O ( n 2 ) O(n^2) O(n2),空间复杂度 O ( 1 ) O(1) O(1)

选择排序 ( S e l e c t i o n S o r t Selection Sort SelectionSort)

• 原理:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
• 复杂度:无论最好、最坏还是平均情况,时间复杂度均为 O ( n 2 ) O(n^2) O(n2),空间复杂度 O ( 1 ) O(1) O(1)

插入排序 ( I n s e r t i o n S o r t Insertion Sort InsertionSort)

• 原理:把待排序的数组分成已排序和未排序两部分,初始时已排序部分只包含第一个元素,然后依次从未排序部分取出元素插入到已排序部分的正确位置。
• 复杂度:最好情况 O ( n ) O(n) O(n),最坏情况 O ( n 2 ) O(n^2) O(n2),平均情况 O ( n 2 ) O(n^2) O(n2),空间复杂度 O ( 1 ) O(1) O(1)

希尔排序 ( S h e l l S o r t Shell Sort ShellSort)

• 原理:是插入排序的一种更高效的版本,通过将原始数据分割成若干子序列,先让这些子序列基本有序,然后再对全体记录进行一次直接插入排序。
• 复杂度:取决于间隔序列的选择,最坏情况可以达到 O ( n 2 ) O(n^2) O(n2),但通过好的间隔序列选择,可以降低到 O ( n l o g n ) O(nlogn) O(nlogn)

归并排序 ( M e r g e S o r t Merge Sort MergeSort)

• 原理:采用分治法的思想,将数组分成两半分别排序,再将结果合并在一起。这是一个递归过程。
• 复杂度:时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),空间复杂度 O ( n ) O(n) O(n)

快速排序 ( Q u i c k S o r t Quick Sort QuickSort)

• 原理:也是分治法,选择一个基准元素,通过一趟排序将待排记录分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序。
• 复杂度:平均时间复杂度 O ( n O(n O(n l o g log log n ) n) n),最坏情况 O ( n 2 ) O(n^2) O(n2),但通过随机选取基准可以优化至几乎总是 O ( n O(n O(n l o g log log n ) n) n),空间复杂度 O ( l o g O(log O(log n ) n) n)

堆排序 ( H e a p S o r t Heap Sort HeapSort)

• 原理:利用堆这种数据结构所设计的一种排序算法。将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。
• 复杂度:时间复杂度 O ( n O(n O(n l o g log log n ) n) n),空间复杂度 O ( 1 ) O(1) O(1)

计数排序 ( C o u n t i n g S o r t Counting Sort CountingSort)

• 原理:是一种非比较型整数排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,它对于小范围内的整数排序非常高效。
• 复杂度:时间复杂度 O ( n + k ) O(n+k) O(n+k),其中k为待排序数组中最大数与最小数的差值加 1 1 1,空间复杂度O ( n + k ) (n+k) (n+k)
这些算法在实际应用中,根据数据的特点和需求(如数据量大小、是否原地排序、稳定性要求等)选择最适合的算法。

快排

C + + C++ C++标准库中,也提供了高效的排序函数
std::sort,它通常使用的是某种形式的快速排序,并且在特定情况下会自动切换到其他算法以保持高性能。


C++/Python排序算法
有一部分是已经出了文的,剩下的我会努力肝的!

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

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

相关文章

51单片机入门(一)

1. 51单片机的基础介绍 2. RAM和ROM的区别 总体而言,RAM和ROM在计算机系统中起着不同的角色,RAM用于临时存储运行时数据,而ROM用于存储永久性的固件和系统程序。 3. 为什么叫51单片机 因为51系列单片机都是使用Intel 8031指令系统的单片机…

linux网络编程启动!(开端)

网络设计模式 :就两种模型 b/s 模型 : 浏览器—>服务器 优点是:跨平台。开发成本低 缺点是:网络通信的时候必须要使用http/https协议 http协议 是个应用层协议 不能在磁盘缓存或者从磁盘加载大量数据 http 与https 多了一层加密 c/s模型 …

C# Solidworks二次开发:访问平面、曲面相关API详解

大家好,今天要介绍的是关于平面、曲面相关的API。 下面是相关的API: (1)第一个为ISurfacePlanarFeatureData,这个API的含义为允许访问平面表面特征,下面是官方的具体解释: 下面是官方使用的例子&#xff…

美国站群服务器的配置选择要点?

美国站群服务器的配置选择要点? 随着互联网的快速发展,站群已经成为许多网站主和企业选择的一种有效的网络推广方式。而在搭建站群时,选择适合的服务器配置是至关重要的。美国作为全球互联网技术的先锋之一,拥有先进的服务器设施和强大的网…

【 书生·浦语大模型实战营】作业(四):XTuner 微调 LLM:1.8B、多模态、Agent

【 书生浦语大模型实战营】作业(五):LMDeploy 量化部署 🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系…

Linux——(关于权限常见的3个问题)

文章目录 1.修改文件或者目录的拥有者和所属组1.1chown指令1.2chgrp指令 2.常见的权限三个问题2.1对应一个目录,如果要进入,需要什么权限?2.2为什么我们创建的文件默认权限不是7772.2.1关于Linux下的权限掩码 2.3文件能否被删除取决于什么2.3…

Beyond Chain-of-Thought: A Survey of Chain-of-X Paradigms for LLMs论文阅读笔记(未完待续)

地址:https://arxiv.org/html/2404.15676v1 一些论文合集:https://github.com/atfortes/Awesome-LLM-Reasoning 背景 思维链 (Chain-of-Thought,CoT) 是一种被广泛采用的提示方法,它激发了大型语言模型 …

《HCIP-openEuler实验指导手册》2.1安装和测试Nginx

知识点 Nginx (发音为 “engine x”) 是一个开源的高性能 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。由 Igor Sysoev 创建并维护,其设计用于处理高并发连接,具有高度的可扩展性和灵活性。 安装步骤 yum方式安装 dn…

go语言实现简单ngnix样例

目录 1、代码实现样例: 2、postman调用ngnix,转发: 1、代码实现样例: package mainimport ("bytes""encoding/json""io""log""net/http""net/http/httputil""…

ruoyi-nbcio-plus基于vue3的flowable收回任务后重新进行提交表单的处理

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

Python AI库 Pandas的常见操作的扩展知识

Python AI库 Pandas的常见操作的扩展知识 本文默认读者具备以下技能: 熟悉python基础知识,vscode或其它编辑工具 熟悉表格文件的基本操作 具备自主扩展学习能力 前文中对Pandas的数据结构以及基础操作做了介绍,本文中会在前文的基础上,对常见的操作进…

selenium拉动滚动条

selenium拉动滚动条 # 导包 from selenium import webdriver from time import sleep # 获取浏览器驱动对象 driver webdriver.Edge() # 最大化浏览器 driver.maximize_window() # 隐式等待 driver.implicitly_wait(30) # 打开url url r"C:\Users\黄永生\Desktop\软件测…

计算机找不到vcruntime140_1.dll,无法继续执行代码快速解决方法

vcruntime140_1.dll是一个重要的Windows操作系统中的动态链接库(DLL)文件,它是微软Visual C Redistributable软件包的组成部分。以下是该文件的详细介绍: 名称含义:“vcruntime”代表Visual C Runtime,表明…

static page 项目

static page 项目 作者:不染心 博客地址:https://blog.csdn.net/qq_38234785 源码地址:https://mbd.pub/o/bread/ZpWVlJps 未经允许,不得转载 文档版本v1,还没写完持续更新 一、引言 1. 软件概述和背景 本软件是…

STM32f103 HAL库读保护以及解除

读保护 void Flash_EnableReadProtection(void) {FLASH_OBProgramInitTypeDef OBInit;__HAL_FLASH_PREFETCH_BUFFER_DISABLE();HAL_FLASHEx_OBGetConfig(&OBInit);if(OBInit.RDPLevel OB_RDP_LEVEL_0){OBInit.OptionType | OPTIONBYTE_RDP;OBInit.RDPLevel OB_RDP_LEVEL…

FIR滤波器——DSP学习笔记三(包含一个滤波器设计的简明案例)

​​​​​​ 背景知识 FIR滤波器的特性与优点 可精确地实现线性相位响应(Linear phase response),无相位失真; 总是稳定的,所有极点都位于原点 线性相位FIR滤波器的性质、类型及零点位置 冲击响应满足:奇…

【PyTorch】torch.gather() 用法

gather常被用于image做mask的操作中,对哪些地方进行赋值0/1 API: torch.gather — PyTorch 2.2 documentation torch.gather(input, dim, index, outNone) → Tensor gather()的意义: 顾名思义,聚集、集合:gather…

VS2019配合QT5.9开发IRayAT430相机SDK

环境配置 VS2019 QT5.9 编译器版本 MSVC2017_64添加系统环境变量(完毕后重启电脑) 从VS2019中下载Qt插件 从VS2019中添加单个编译组件 上述操作完成后用VS打开工程文件,工程文件地址 : C:\Users\86173\Desktop\IRCNETSDK_W…

数据分析:生存分析原理和应用实例

介绍 生存分析的目的是分析某个时间点的“生存概率”是多少。基于这样的研究目的,需要提供生存数据,它是一种由不同的开始时间和结束时间组成的事件-时间的数据,比如在癌症研究领域,研究手术到死亡的过程、治疗到疾病进展等等。 在开展生存分析前,需要了解什么是删失(c…

时间序列生成数据,TransformerGAN

简介:这个代码可以用于时间序列修复和生成。使用transformer提取单变量或者多变时间窗口的趋势分布情况。然后使用GAN生成分布类似的时间序列。 此外,还实现了基于prompt的数据生成,比如指定生成某个月份的数据、某半个月的数据、某一个星期的…