408第一季 - 数据结构 - 排序

排序的概念

外部排序很难,后面都是内部排序 

插入排序

直接插入排序

理解

这个排序第一轮是从第二个元素开始的

然后是从后往前一个一个比的

然后我们看i=5的情况,会出现比较次数和移动次数的概念,这里97动了

然后i=8时,49最好放在相同的后面,这样就可以稳定

这个算法会有n-1趟

然后第n趟会有n+1个有序,比如第二趟i=3时会有3个元素有序

这是最坏情况,可以看见第一趟移动和比较都是1次,第二趟2次,第三趟3次

也就是这么多次移动和比较

折半插入排序

理解

前面不是已经是有序的吗,所以用折半多爽啊

直接是从后往前比,而折半是折半查找比,这里查找顺序是65,49,38

题目

d

希尔排序

理解

下面增量d=5

然后每组之间排序 也可以直接竖着写,这样更快

然后是增量为3

然后竖着写,这样更快,结果:

那增量怎么取?

没错,最后一个是增量是d=1就行

这就是传说中的

 链表不太行啊

题目

1

2

我们先看d=3行不行

一会升序一会降序,所以不是3

然后看d=5可以发现每一组都是有序的,而且必须每一组都是有序的,所以一定要竖着写下来

然后根据第一趟看第二趟的就行了

d

交换排序

冒泡排序

理解

怎么去做呢,看好了

49 和 27 比,小的在上,大的在下,很好,过

27 和 13 比,小的在上,大的在下,很好,过

13 和 76 比,小的在下,大的在上,不好,交换!

。。。就这样一直比下去就行,就是1轮

第一轮比较了n-1次,并且13已经确定好了

第二轮比较了n-2次,并且27已经确定好了

。。。

然后会有这个规律

然后注意

最好情况就比较了1次

快速排序

理解

这是规矩

快排的目的是小的放左边,大的放右边

这里6作为枢轴(pivot),从7往左比较

然后比较一下7,没问题,是大于6的,太好了,很舒服,不错,继续保持,加油

然后比较一下4,wait,wait,wait,what the HELLLLL!WAAZZZAAAA!是小于6的

然后会发生很多事情

4先到枢轴上去,6往后找比它大的,找到了9

然后把9放到4那里,9的地方就存储6

然后神奇的事情发生了,6变成了我们想要的样子,左边小于6,右边大于6,6这个位置已经确定了

然后就是算法大师最喜欢的分治法

左右两边都处理是第二趟,左右两边都进行快排

先看左边

,这里4是枢轴,然后从5开始往右

5没事

1有事,小于4,先把1到枢轴,然后枢轴的指针往后移动开始找比它大的数,最后发现与右指针相遇,于是只能把4放到那里

再看右边

这里8是枢轴,然后从7开始往右

7有事,小于8,先把7到枢轴,然后枢轴的指针往后移动开始找比它大的数,发现个9,9到7那里,8插入到里面来

然后不用第三趟了,因为左右两边就1个元素

然后每次会有logn趟,每趟是n

所以时间复杂度Onlogn

最差情况下是有序的情况,时间复杂度达到On^2

比如这里,1要找比它小的,找了n-1次,没找到,向右的指针会到1这里,1确定了,然后枢轴指针往后移动变成2,再来一次,找了n-2次,就这样,当然别固化死了,这里枢轴不一定要是第一个,也可以是中间的4,但说到底只有一个枢轴。

链表还是不行

做题

1

d 不解释 

2

 

 这里是枢轴产生的三种情况,可以注意到d选项,

12如果是第一趟的枢轴,那应该左右两边都有才对,然而并不是左右,这里只有一个32

 

 然后我们看看A选项

这里我们那72当第一趟,那28作为下一趟就合理了

3

这里,最少最少得有2个枢轴,而C选项只有1个9

B选项是9和2是枢轴

c

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

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

相关文章

高效账号信息管理工具,可安全随机生成密码

软件介绍 今天给大家推荐一款安全可靠的密码管理工具,帮助用户轻松管理各类账号密码。 安全便捷的密码解决方案 这是一款采用先进加密技术开发的密码管理器,不仅可以生成高强度随机密码,还提供安全的账号密码备份存储功能。 基础安全设置 …

如何在markdown文件中(博客)添加emoji表情,让你的博客看起来更加优雅

在Markdown中使用Emoji的完整指南 按分类快速参考的完整Emoji列表一、状态指示类:bulb:二、提示信息类:bulb:三、内容类型类:bulb:四、操作指令类:bulb:五、进度状态类:bulb:六、技术相关类:bulb:七、人员角色类:bulb:八、版本控制类:bulb: 你学会了吗 按分类快速参考的完整Emo…

MAZANOKE:一款隐私优先的浏览器图像优化工具及Docker部署指南

在日常工作中,大家是否经常遇到这样的需求:需要压缩图片体积、调整图片尺寸或转换图片格式,但又受限于数据安全要求无法将图片上传至公网?在我们之前开发的工单配置系统中,这类需求尤为常见。最近在GitHub上发现了一款…

【Vue PDF】Vue PDF 组件初始不加载 pdfUrl 问题分析与修复

Vue PDF 组件初始不加载 pdfUrl 问题分析与修复 问题现象 在开发 PDF 预览组件时,遇到这样一个问题: 初始状态下,PDF 组件不会请求 pdfUrl(即不会加载 PDF 文件)。只有点击"全屏"按钮后,才会请…

《注解的江湖:一场元数据的“宫斗剧”》

一、你真的懂注解吗 你是否使用过Autowired却不知道是如何生效的? 这几个注解你一定很熟悉: OverrideDeprecatedTransactional 那么你有进一步思考过怎么生效的吗?注解到底是什么?注解,到底是信息?还是指…

智能土木通 - 土木工程专业知识问答系统02-RAG检索模块搭建

一、项目目录 civil_qa_system/ ├── docs/ # 项目文档 ├── config/ # 配置文件 ├── core/ # 核心功能代码 ├── knowledge_base/ # 知识库相关 ├── web/ # Web应用部分 ├…

进程和线程区别、管道和套接字、共享变量、TCP三次握手,是否可以少一次握手、子进程和主进程区别和API——Nodejs

首先讲了进程和线程区别 然后讲解 管道和套接字,它是进程间通信的方式 接着讲解共享变量 ,它是线程间通信 最后讲解TCP三次握手,因为套接字使用了TCP协议 一、线程和进程的区别 线程(Thread)和进程(Pr…

docker(学习笔记第一课) 使用nginx +https + wordpress

文章目录 docker(学习笔记第一课) 使用nginx https wordpress学习内容:1. 整体架构1.1 在aws ec2的整体架构1.2 不懂都可以问AI 2. 构建详细2.1 构建ec22.2 安装docker2.3 创建一个docker的内部network2.4 创建wordpress使用的mysql数据库2.5 创建两个wordpress的d…

Leetcode 刷题记录 15 —— 二分查找

本系列为笔者的 Leetcode 刷题记录,顺序为 Hot 100 题官方顺序,根据标签命名,记录笔者总结的做题思路,附部分代码解释和疑问解答,01~07为C语言,08及以后为Java语言。 01 搜索插入位置 class Solution {pub…

C++核心编程(动态类型转换,STL,Lanmda)

一. 类型转换 二. STL 1. 容器 1.1 Vector(常用) 1.1.1 概述 特性: 动态数组: 想象成一个会自动变长变短的数组。起始在内存中是连续存储的。 随机访问: 通过[]运算符或at()方法,可以瞬间(…

【图像处理入门】8. 数学基础与优化:线性代数、概率与算法调优实战

摘要 图像处理的核心离不开数学工具的支撑。本文将深入解析线性代数、概率论在图像领域的应用,包括矩阵变换与图像几何操作的关系、噪声模型的数学描述,以及遗传算法、粒子群优化等智能算法在参数调优中的实践。通过理论结合代码案例,帮助读者掌握从数学原理到工程优化的完…

操作系统八股文

一.进程和线程的区别 1.本质区别和所属关系是什么? 进程是资源调度以及分配的基本单位。 线程是CPU调度的基本单位。 一个线程属于一个进程,一个进程可以拥有多个线程。 2.地址空间和内存 进程拥有独立的虚拟地址空间。 线程没有独立的地址空间&#xf…

【uniapp】小程序中input输入框的placeholder-class不生效

解决方法 1.去掉scoped <style></style> 2.额外写一组style </style lang"scss" scoped> </style> <style> ::v-deep .textarea-placeholder { font-size: 24rpx; font-weight: 400; …

大模型训练与推理显卡全指南:从硬件选型到性能优化

在人工智能技术飞速发展的今天&#xff0c;大型语言模型(LLM)已成为推动行业进步的核心动力。然而&#xff0c;训练和部署这些“数字巨人”需要强大的计算基础设施作为支撑&#xff0c;其中GPU的选择直接决定了模型开发的效率与成本。本文将全面剖析当前主流GPU型号在大模型训练…

Linux Docker的环境配置与简单使用

参考资料 Windows Docker Desktop设置中文【Docker 】Docker Desktop for Windows&#xff08;WSL 2&#xff09;安装WSL 2 上的 Docker 远程容器入门 目录 一. 环境配置1.1 安装WSL1.2 安装配置 Docker Desktop1.3 VS Code 插件安装1.4 下载项目&#xff0c;配置Dockerfile 二…

函数指针与指针函数:本质区别与高级应用

目录 一、概念本质解析 1. 函数指针&#xff08;Function Pointer&#xff09; 2. 指针函数&#xff08;Pointer Function&#xff09; 二、函数指针深度剖析 1. 基础用法示例 2. 高级应用&#xff1a;回调函数 3. 函数指针数组 三、指针函数深入探讨 1. 基础实现模式 …

【python】基于pycharm的海康相机SDK二次开发

海康威视二次开发相机管理 这段代码基于python开发的&#xff0c;用了opencv的一些库函数。实现了一个完整的海康机器人相机管理工具&#xff0c;支持多相机连接、参数配置、图像采集和实时显示功能。目前USB相机测试无误&#xff0c;除了丢一些包。 1. 主要类结构 HKCameraM…

HTTP 协议各个主要版本的功能特点、核心原理、使用场景总结

我们来系统总结一下 HTTP 协议各个主要版本的功能特点、核心原理&#xff08;用图示辅助说明&#xff09;以及典型使用场景。 核心演进目标&#xff1a; 提升性能、安全性、效率和灵活性。 1. HTTP/0.9 (1991) - 远古雏形 功能特点: 极其简单&#xff1a; 只支持 GET 方法。无…

Linux编程:3、进程通信-信号

一、进程通信概述 &#xff08;一&#xff09;进程通信的目的 在企业开发中&#xff0c;一个项目常常需要多个进程共同协作&#xff0c;而这些进程之间需要进行通信&#xff08;交换信息&#xff09;以便协作。本章内容主要围绕信号讲解&#xff0c;其它进程通信的常用方式请…

深度解析Vue.js组件开发与实战案例

一、Vue.js组件化思想 Vue.js的核心思想之一就是组件化开发。组件系统是Vue的一个重要概念,它允许我们使用小型、独立和通常可复用的组件构建大型应用。在Vue中,组件本质上是一个拥有预定义选项的Vue实例。 1.1 为什么需要组件化 代码复用:避免重复造轮子,提高开发效率可…