排序算法(总结)-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方向综述、论文等成体系…

golang封装调用kafka的工具包

封装一个golang调用kafka的工具包,包含了consumer,producer,auth,在自己的生产环境上做过验证。可以做参考作用,也可以直接使用。 部分代码 // Run 执行消费动作 func (cg *ConsumerGroup) Run(ctx context.Context) {defer cg.close()for {select {ca…

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…

读书笔记--数据管理知识体系的阅读总结感悟

最近继续研读DAMA数据管理知识体系之数据管理章节,结合自身在应用系统建设、数据治理工作实践,有所感悟并记录如下,供大家参考。数据管理工作需要技术和非技术的双重技能,由业务人员和信息技术人员相互协作,共同来承担责任,确保组织管理的数据是高质量的,主要驱动力是使…

go语言实现简单ngnix样例

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

Chapter 1-17. Introduction to Congestion in Storage Networks

Q: Isn’t increasing network capacity the ultimate solution to network congestion? Increasing network capacity is the solution when a lack of network capacity is the root cause of congestion. There are many more reasons for network congestion and in thos…

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…

双目视觉(双目相机)

1.时间同步 需要一个单独的硬件(单片机)单独给每一个相机发送触发信息,然后再接收返回。 2.相机选型: (1)相机的分辨率 根据对图像精度的要求来选择相机的分辨率。 (2)颜色 通…

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滤波器的性质、类型及零点位置 冲击响应满足:奇…