数据结构-排序思想
直接插入排序
将后面的无序区中的元素挨个向前面的有序区中插入。
1.将顺序表中R[0]用作哨兵,按索引i=2...n的次序,将R[i]向有序区R[1...i-1]中执行插入操作。
2.插入操作可采取在有序区中从后向前的查找比较和移动的方法。
3.此操作中比较的次数与原序列的排列状态有关:
原序列为正序时在插入操作中插入位置为尾部即只需要比较一次;
原序列为反序时插入位置为头部则需要和有序序列中的每个元素比较一次。
时间复杂度:正序时O(n),反序时 O(n²),平均时间复杂度 O(n²)
空间复杂度:O(1),就地排序
直接插入排序是稳定的。
希尔排序(分组插入排序)
1.把序列分为d个组,分组方法为所有距离为d的元素划到一个组内。
2.各组内进行直接插入排序。
3.按照避免增量序列中的值互为倍数,及最后一个增量必须为1的原则,设定增量序列d。
希尔排序是不稳定的。
冒泡(交换)排序
1.从下面无序区的最底部元素开始向上两两比较,最小者交换到无序区的最顶部,它同时也处了在有序区的最底部。
2.当某一趟扫描中的两两比较未出现交换,则说明无序区已全部有序,排序结束。
时间复杂度:正序时O(n),反序时 O(n²),平均时间复杂度 O(n²)
空间复杂度:属于就地排序
冒泡排序是稳定的。性能低于直接插入排序。
快速(交换)排序(基准分冶)
1.确定基准
在区间R中可随机选择一个元素作为基准,和R[0]交换位置。
2.对比划分
以R[0]作为基准做一趟划分操作:从区间两端开始向中间依次交替与基准比较大,根据小在左侧、大在右侧的规则与基准交换位置,最终生成比基准值小和大的左右两个无序的子区间。
3.递归
对每个子区间递归定基准-划分过程。
划分操作结果中有一个子区间为空,及两个子区间都不为空,这两种情况比较,前者整体排序中做的比较次数更多。
时间复杂度:最好 O(nlgn),最坏 O(n²),平均 O(nlgn)
空间复杂度:O(lgn)
快速排序是不稳定的。
直接选择排序
1.从后面的无序区中选择最小的元素,与无序区头部元素交换,即有序区末尾增加一个元素。
2.对新的有序区和无序区执行上一步操作。
时间复杂度:O(n²)
空间复杂度:O(1),就地排序
直接选择排序是不稳定的。
插入排序是先在指定位置取元素,然后再找合适的位置插入,重心在第二步的插入。
选择排序是先找最小的元素,然后交换到指定位置,重心在第一步的选择。
堆排序(树形选择排序)
调整堆(筛选):判断调整根子树,将根与两个孩子中较大者(大根堆)交换,继而判断调整有变动的子子树。
1.构造堆
从下往上依次对位置为[n/2]...1为根的子树做调整堆操作。
结果构造出了堆,此时只是符合堆性质,但并不有序。
2.将堆根元素交换到无序区尾部。
i为本次调整的序号,将堆顶元素R[1]和最后一个元素R[n-i+1]交换,则新的无序区变为R[1...n-i],有序区为R[n-i+1,n]。
3.重建堆
对新的无序区判断调整堆。
4.重复2、3步骤共n-1次。
时间复杂度:O(nlgn)
空间复杂度:O(1),就地排序
堆排序是不稳定的。
归并排序(二路归并排序)
1.将区间内的元素两两做二路归并。
2.将上一步形成的各个有序组两两做二路归并。
3.直至全部元素进入同一个有序组。
4.二路归并需要同等的辅助空间。
时间复杂度:O(nlgn)
空间复杂度:O(n),
归并排序是稳定的。
以上基于关键字比较的排序时间下限是O(nlgn),而分配排序无须比较关键字,通过分配和收集过来实现排序,它们的时间复杂度可以下破到线性阶O(n)。
箱排序(桶排序)
分配排序不基于关键字比较,而是通过分配和收集过程实现排序。时间复杂度可达线性阶。
第一种箱排序是设置箱子个数和关键字的种类的个数相同;
第二种桶排序是关键字映射到某个桶中,桶中的所有元素再单独做关键字比较排序
基数排序
基数排序要求分析关键字的结构,分为多关键字和单关键字,每个关键字又由多个位组成。
单关键字的每位即每个分量可能取值个数称为基数,
基数排序是按基数的个数次数从低位到高位对序列元素进行箱排序,每箱排序的结果作为下一趟排序的输入。
基数排序是稳定的。
相关文章:
数据结构-排序思想
直接插入排序 将后面的无序区中的元素挨个向前面的有序区中插入。 1.将顺序表中R[0]用作哨兵,按索引i2...n的次序,将R[i]向有序区R[1...i-1]中执行插入操作。 2.插入操作可采取在有序区中从后向前的查找比较和移动的方法。 3.此操作中比较的次数与原序列…...
python 快速排序(Quick Sort)
快速排序(Quick Sort) 快速排序是一种高效的排序算法,采用分治法(Divide and Conquer)策略。它的基本思想是:选择一个基准元素(pivot),将数组分为两部分,使得…...

MySQL数据库——常见慢查询优化方式
本文详细介绍MySQL的慢查询相关概念,分析步骤及其优化方案等。 文章目录 什么是慢查询日志?慢查询日志的相关参数如何启用慢查询日志?方式一:修改配置文件方式二:通过命令动态启用 分析慢查询日志方式一:直…...

【AIGC篇】AIGC 引擎:点燃创作自动化的未来之火
:羑悻的小杀马特.-CSDN博客 未来都是惊喜。你生来本应为高山。并非草芥。 引言: 在当今数字化的时代,人工智能生成内容(AIGC)正以一种前所未有的力量改变着我们的创作领域。它就像一个神秘而强大的魔法师,…...

C语言性能优化:从基础到高级的全面指南
引言 C 语言以其高效、灵活和功能强大而著称,被广泛应用于系统编程、嵌入式开发、游戏开发等领域。然而,要写出高性能的 C 语言代码,需要对 C 语言的特性和底层硬件有深入的了解。本文将详细介绍 C 语言性能优化的背后技术,并通过…...
常用的公共 NTP(网络时间协议)服务器
公共 NTP 服务列表 以下是一些常用的公共 NTP(网络时间协议)服务器,供您参考: 中国地区公共 NTP 服务器 国家授时中心 NTP 服务器:ntp.ntsc.ac.cn中国 NTP 快速授时服务:cn.ntp.org.cn阿里云公共 NTP 服务…...

Kafka中的Topic和Partition有什么关系?
大家好,我是锋哥。今天分享关于【Kafka中的Topic和Partition有什么关系?】面试题。希望对大家有帮助; Kafka中的Topic和Partition有什么关系? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Apache Kafka 中&#…...

Unity 使用UGUI制作卷轴开启关闭效果
视频效果 代码 using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using DG.Tweening.Core; using DG.Tweening.Plugins.Options;public class JuanZhou : MonoBehaviour {[SerializeField]private …...

MarkDown怎么转pdf;Mark Text怎么使用;
MarkDown怎么转pdf 目录 MarkDown怎么转pdf先用CSDN进行编辑,能双向看版式;标题最后直接导出pdfMark Text怎么使用一、界面介绍二、基本操作三、视图模式四、其他功能先用CSDN进行编辑,能双向看版式; 标题最后直接导出pdf Mark Text怎么使用 Mark Text是一款简洁的开源Mar…...

整合版canal ha搭建--基于1.1.4版本
开启MySql Binlog(1)修改MySql配置文件(2)重启MySql服务,查看配置是否生效(3)配置起效果后,创建canal用户,并赋予权限安装canal-admin(1)解压 canal.admin-1…...

QGIS移动图元功能
有时需要在QGIS里面移动一些矢量图层,比如图层的地理配准,网上搜了一些资料没有查看,后来仔细找了下,在编辑-编辑几何图形-移动要素里面,可以移动图层。 注意:移动前先要选择上要移动的图层,之…...
【模电刷题复习--填空】
如有错误,欢迎各位大佬在评论区批评指正 模电刷题 一、填空题1.本征半导体中,若掺入微量的__五__价元素,则形成___n___型半导体,其多数载流子是自由电子,若掺入微量的__三__价元素,则形成__p__型半导体。其…...
shardingsphere-jdbc-core-spring-boot-starter的性能问题(理论)
hardingSphere-JDBC-core-spring-boot-starter 是 ShardingSphere 提供的与 Spring Boot 集成的模块,用于实现数据库的分库分表等功能。在性能方面,它既有优势也存在一定的挑战,以下是具体分析: 优势方面 数据分片提升查询性能 通…...
Java Map 集合详解:基础用法、常见实现类与高频面试题解析
在 Java 集合框架中,Map 是用于存储键值对(Key-Value)的重要接口,广泛应用于开发中的各种场景。本文将详细讲解 Map 的基础概念、常见实现类及其特性,并结合代码示例和高频面试问题,帮助你深入理解 Map 的用…...

一款基于.Net方便、快捷的数据库文档查询、生成工具
项目介绍 SmartSQL 是一款方便、快捷的数据库文档查询、导出工具!从最初仅支持SqlServer数据库、CHM文档格式开始,通过不断地探索开发、集思广益和不断改进,又陆续支持Word、Excel、PDF、Html、Xml、Json、MarkDown等文档格式的导出。同时又…...

Linux平台下实现的小程序-进度条
目录 1.换行、回车概念 2.缓冲区 2.1缓冲区 2.2强制刷新 3.进度条程序 Makefile文件 ProgressBar.h ProgressBar.c Main.c 执行结果 1.换行、回车概念 /n:换行回车(\r:回车) 2.缓冲区 如下图在vim编辑器中的命令模式下…...

Ubuntu 22.04.5 修改IP
Ubuntu22.04.5使用的是netplan管理网络,因此需要在文件夹/etc/netplan下的01-network-manager-all.yaml中修改,需要权限,使用sudo vim或者其他编辑器,修改后的内容如下: # Let NetworkManager manage all devices on …...
解决virtualbox出现开启DHCP之后ubuntu虚拟机之后IP重复的问题
找遍了国内论坛,没一个能解决该问题的,所以我自己写个文章吧,真讨厌那些只会搬运的,污染国内论坛环境,搜一个问题,千篇一律。 问题 操作系统版本为"Ubuntu 24.04 LTS" lennytest1:~$ cat /etc…...
Java开发工具-Jar命令
Java开发工具-Jar 1、jar命令全平台使用 2、jar命令的作用 为类和资源创建存档,并从存档中操作或恢复单个类或资源 3、摘要 jar [OPTION …] [ [–release VERSION] [-C dir] files] … 4、jar命令描述 jar命令通常作为用于压缩与解压的工具,基于ZIP或Z…...

UE5通过蓝图节点控制材质参数
通过蓝图节点控制材质的参数 蓝图节点 在材质上设置标量值 和 在材质上设置向量参数值 Set Scalar Parameter Value on Materials Set Vector Parameter Value on Materials 这两个蓝图节点都可以在蓝图中,控制材质的参数值和向量值...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...