当前位置: 首页 > article >正文

解析四种排序算法

解析四种排序算法

冒泡排序

  • 原理

依次遍历数组,比较相邻两个元素的大小。若前面数据大于后边数据,则交换。否则不变。

这样一来,每次就都只能确定一个数据的位置。

  • 时间复杂度

因为是比较一遍花 O ( n ) O(n) O(n),需要确定 n n n 个,需要跑 n n n 次,时间复杂度为 O ( n 2 ) O(n^2) O(n2)

  • 稳定性

对于相邻的两个元素,不满足交换条件,所以不会交换,是稳定的排序算法。

插入排序

  • 原理

每次将原数组划分为有效部分,划分 n n n 次,每次将剩下的无效部分按照大小插入到有效部分内。

最后的包含 n n n 个元素的有效部分即为排好序的数组。

  • 时间复杂度

划分 n n n 次,每次需要处理 n n n 次比较,时间复杂度为 O ( n 2 ) O(n^2) O(n2)

  • 稳定性

这里的稳定性重点在将其余数字插入到有效范围内。很显然,对于每个位置,在插入的时候,会保持原顺序,即不会出现某个元素 x x x 要插入到 x ′ x' x ( x = x ′ ) (x=x') (x=x) 前面的情况。

快速排序

  • 原理

选择一个基准数,将所有数据划分为两个区间:小于基准数的和大于基准数的。

然后对每个区间继续重复操作。

  • 时间复杂度

选取基准数为 O ( l o g 2 n ) O(log^n_2) O(log2n),排序时间为 O ( n ) O(n) O(n),共 O ( n log ⁡ 2 n ) O(n\log _2^n) O(nlog2n)​。

  • 稳定性

快速排序主要看的是区间内的排序,并不能保证稳定性。

归并排序

  • 原理

与快排类似,每次都将所有数据分为两个区间,在将每个区间分成两个区间……直到区间长度为 2 2 2,这时再将已经排好序的区间合并。

  • 时间复杂度

分成区间时间复杂度 O ( log ⁡ 2 n ) O(\log^n_2) O(log2n),比较 O ( n ) O(n) O(n),总时间复杂度为 O ( n log ⁡ 2 n ) O(n\log^n_2) O(nlog2n)

  • 稳定性

归并排序可以保证在相邻两个元素相等时,处在前面的序列一定会在处理时在后面的序列的前面。

所以归并排序为稳定的排序算法


http://www.kler.cn/news/284500.html

相关文章:

  • 自动驾驶中的模仿学习
  • I 2U-Net: 一种具有丰富信息交互的双路径U-Net用于医学图像分割|文献速递-大模型与多模态诊断阿尔茨海默症与帕金森疾病
  • 色彩与笔触的交响:广州米塔在线科教技术有限公司揭秘PS绘画秘籍!
  • 如何用3D人脸扫描设备建模面部细节,打造逼真3D虚拟人脸?
  • STM32(八):定时器——输入捕获实验
  • Kimi 化身为你的私人翻译神器
  • 深入了解linux下TCP并发服务器和IO模型的实现
  • 设计模式25-访问器模式
  • 每日一题——第六十八题
  • 信息技术(科技)老师资料大本营2024-8-31
  • ORACLE-RMAN重新生成归档日志
  • 记录一下腾讯云即时通信IM(无UI集成)、TRTC做文字、语音、图片、实时音视频聊天遇到的问题
  • 2025秋招大语言模型落地实践面试题
  • 【Unity基础】Unity中移动物体的8种方法
  • 12-使用gateway作为微服务网关
  • 【统计分析与数据挖掘】基本统计分析方法与数据挖掘技术
  • 前端的面试题
  • 数据爬虫工作中的IP清理频率
  • 网络安全售前入门06安全服务——基线检测服务方案
  • 【GPT】基于GPT_API_free做一个自己的gpt
  • 通信算法之229: 通信系统中的Eb/N0与SNR
  • 【GPT】Coze使用开放平台接口-【4】创建机器人
  • Go 语言文件 I/O 和 OS 操作
  • mysql中的mysql 库不存在,进行恢复
  • 斯坦福UE4 C++课学习补充24:伤害数值
  • ComfyUI 中 Safetensors 文件的介绍
  • 物联网设备在等保测评中的安全考量
  • 若依后端添加子模块swagger分区
  • (转载)内存分配器101——写一个简单的内存分配器
  • SOA通信中间件介绍(一)