C语言 语法

ops/2025/2/14 1:12:19/

常用的排序算法(4):

插入排序(小数据基本有序),快速排序,归并排序(大数据集),堆排序

冒泡排序和选择排序实际场景不会使用性能差

如何评估排序算法的性能:时间复杂度,空间复杂度,稳定性

日常说一个算法的时间复杂度是O(xx),通常都是指该算法的最坏情况时间复杂度。

算法的输入数据已部分接近或就是理想状态时,选择算法考虑它的最好情况。

平均情况时间复杂度有助于了解算法在一般情况下的性能表现,是大多数实际应用中最为关注的指标。

选择排序是不稳定的:3 3‘ 2 

对于稳定性的判断,如果是长距离交换就容易出现不稳定的情况 

插入排序一般写法是稳定的,但是如果是相等的还交换就不稳定

希尔排序就是使得可以一次性可以一次性跨越多个元素位置提高效率,在基本有序的时候效率更高

3. 归并排序

递归和分治思想:递归和分治往往是结合的

归并排序就是分解再合并

取中间元素注意可能溢出 left + ((right-left) >>1); 采用移位的方式可以运算速度更快

递归分解左右区间,是逻辑上的分解,实际上并没有进行分解

在合并中需要用到临时数组,因为如果是还是用原数组进行逻辑上的排序,会导致交换数据以后顺序就乱了。

在主函数中进行临时数组的分配和回收而不是在递归中,因为太复杂混乱

大数据集归并排序的最大优势就是稳定(短距离遍历),时间效率低(递归),空间效率低(需要用到额外数组)

归并排序的时间复杂度是O(nlogn),归并排序与数据内容(有序否)是什么无关(都是拆开合并)。

总结归并排序主要优点就是稳定,性能不是那么好。

4.快速排序 (不稳定)

快速排序一般不会用随机位置作为中间值,效果不好不能选到数值是中间的值,所以一般是选开头或者结尾的元素

快排的效率是最高的。

快排不将递归视作空间复杂度的提高时可以视为原地排序,是O(nlogn),

快排普遍采用递归实现,并且用于大的数据集,如果数据是接近有序的情况下可能会出现栈溢出的情况。

注意递归的时候结束条件写在最上面

5.堆排序(最大的优点是不用递归)(快排和归并排序是递归)

虚拟内存的堆和数据结构的堆没有关系,数据结构的堆理解为特殊的完全二叉树(大小顶堆仅仅是根节点是最大的或者最小的,没有其他关系)

在进行堆排序的时候,并不需要额外的内存空间,将原地的数组视为一个堆构建为大顶堆。

数组的首元素视为完全二叉树根节点,左右子树根节点的下表是2i+1和2i+2;

堆排序与数据本来的情况是无关的(与归并排序一样),构建大顶堆的时间复杂度是O(n)

堆化的时间复杂度是O(logn),总的时间复杂度是O(nlogn)

堆排序是不用递归的,不用占用额外的空间,但是是不稳定的。

插入排序:小数据集!!!!      基本有序最好

归并排序:大数据集,稳定

快速排序:大数据集,通用,效率高,但不稳定,递归可能导致栈溢出可以转用堆排序

堆排序:大数据集,不稳定排序算法,O(1)且不递归

5.二分查找

在工作中很少光使用二分查找,因为有很大的不确定性,不确定是第一个出现还是最后一个出现


http://www.ppmy.cn/ops/8977.html

相关文章

35. UE5 RPG制作火球术技能

接下来,我们将制作技能了,总算迈进了一大步。首先回顾一下之前是如何实现技能触发的,然后再进入正题。 如果想实现我之前的触发方式的,请看此栏目的31-33篇文章,讲解了实现逻辑,这里总结一下: …

node.js-模块化

定义:CommonJS模块是为Node.js打包Javascript代码的原始方式。Node.js还支持浏览器和其他Javascript运行时使用的ECMAScript模块标准。 在Node.js中,每个文件都被视为一个单独的模块。 概念:项目是由很多个模块文件组成的 好处&#xff1a…

极狐GitLab x LigaAI,AI 时代研发提效新范式

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 近日,极狐GitLab 和 LigaAI 宣布合作,双…

JMeter--后置处理器--正则表达式提取器

正则表达式提取器(Regular Expression Extractor) 接口需要关联时,可以通过正则表达式提取所需要的值 右键 >>> 添加 >>> 后置处理器 >>> 正则表达式提取器(Regular Expression Extractor&#xff0…

汽车研发项目进度管理的挑战与优化策略

随着汽车行业的快速发展和市场竞争的加剧,新车型研发项目的进度管理成为车企赢得市场的关键。然而,由于汽车研发项目通常具有投资大、周期长、技术难度高、参与方众多等特点,项目进度管理面临着诸多挑战。为了提升车型研发效率、缩短研发周期…

渐进时间复杂度O(n)

基本操作数 算法的运行速度受计算机性能的影响,所以通常考虑算法效率的不是算法运行的实际用时,而是算法运行所需要进行的基本操作的数量。 像加减乘除、访问变量、给变量赋值等都可以看作基本操作。对基本操作的计数或是估测可以作为评判算法用时的指标…

Webpy(Web开发框架简单应用)

目录 前言: 简单的webpy服务器实现 application(urls, globals())函数 URL映射 url(理解) 映射类型 webpy架构分析 前言: Python Web 开发中,服务端程序可以分为两个部分,一是服务器程序&#xff0c…

【Redis(9)】Spring Boot整合Redis,实现分布式锁,保证分布式系统中节点操作一致性

在上一篇系列文章中,咱们利用Redis解决了缓存穿透、缓存击穿、缓存雪崩等缓存问题,Redis除了解决缓存问题,还能干什么呢?这是今天咱们要接着探讨的问题。 在分布式系统中,为了保证在多个节点间操作的一致性&#xff0…