排序的总结

简介: 排序的总结

1. 冒泡排序 (Bubble Sort)

  • 基本思想:依次比较相邻的两个元素,如果顺序错误就交换它们,一轮比较可以确保最大元素沉底。
  • 特点:简单易懂,但对大规模数据排序效率较低(时间复杂度 O(n^2))。

2. 选择排序 (Selection Sort)

  • 基本思想:每次从未排序的数据中选择最小(或最大)的元素放到已排序部分的末尾。
  • 特点:简单,但效率也较低(时间复杂度 O(n^2)),不适用于大规模数据。

3. 插入排序 (Insertion Sort)

  • 基本思想:类似于整理扑克牌,每次将一个待排序的元素插入到已排序数组的合适位置。
  • 特点:对于小规模数据或基本有序的数据效率较高,但在大规模数据上性能一般(时间复杂度 O(n^2))。

4. 归并排序 (Merge Sort)

  • 基本思想:采用分治法,将原始数组划分为较小的数组,排序后再合并成一个大的有序数组。
  • 特点:稳定且效率较高(时间复杂度 O(n log n)),但需要额外的空间来存储中间结果。

5. 快速排序 (Quick Sort)

  • 基本思想:选择一个基准值,将数组分成两部分,小于基准值的元素放在左边,大于基准值的元素放在右边,然后递归地对两部分进行排序。
  • 特点:高效的排序算法之一,平均时间复杂度为 O(n log n),但最坏情况下可能达到 O(n^2)。

6. 堆排序 (Heap Sort)

  • 基本思想:利用堆的数据结构,将待排序数组构建成最大堆(最小堆),依次取堆顶元素进行排序。
  • 特点:稳定且效率较高(时间复杂度 O(n log n)),但相比快速排序,常数因子较大。

7. 计数排序 (Counting Sort)

  • 基本思想:适用于数据范围不大的整数排序,统计每个元素出现的次数,然后进行排序。
  • 特点:对于数据范围不大且比较集中的数据排序效率很高(时间复杂度为 O(n + k),k 表示数据范围)。

8. 桶排序 (Bucket Sort)

  • 基本思想:将数据分到有限数量的桶里,对每个桶进行单独排序,然后合并。
  • 特点:适用于数据均匀分布在范围内的排序,平均时间复杂度为 O(n + k),k 表示桶的个数。

9. 基数排序 (Radix Sort)

  • 基本思想:按照低位先排序,然后收集;再按照高位排序,再收集,依次进行,直到最高位。
  • 特点:适用于数字范围较小但位数较多的排序,时间复杂度为 O(n * k),k 表示最大的位数。

不稳定的排序:(快速选择一堆西瓜)

空间大的是(快,归,基)

快速排序逼格最高,空间最大,速度最快,都是nlog₂n

快速,堆,归并实现代码较多,速度最快

依靠元素连续下标存储的排序:堆和希尔

外部排序:归并

某一趟不能选出最终位置的有:希尔排序,插入(插入排序就像是打牌,后面的一张一张往前面移动)

某一趟能选出最终位置的有:选择,冒泡,堆,快速

交换排序:冒泡,快速

相关文章
|
算法 Shell 测试技术
Monkey 常用命令详解含高级参数应用
Monkey 常用命令详解含高级参数应用
Monkey 常用命令详解含高级参数应用
|
8月前
|
数据可视化 测试技术 数据处理
自定义函数:为接口开发增添灵活性 - Apipost 的独特优势
Apipost 的自定义函数功能为接口开发带来了灵活性与效率,支持内置函数(如 `md5`、`sha`、`base64` 等)和自定义扩展,满足复杂业务需求。相比 Apifox 的局限性,Apipost 可轻松实现数据加密、格式化等操作,例如对用户密码或银行卡号进行多层加密处理。实际案例中,某金融科技公司利用 Apipost 自定义函数实现了数据安全与合规要求,大幅提高开发效率。通过透明化、生态化和智能化的参数处理,Apipost 成为高效接口开发的理想工具。
|
Linux 调度 Docker
cgroup技术概述
【9月更文挑战第19天】cgroup(control group)是Linux内核的一种资源控制系统,通过不同的子系统来控制进程对资源的使用,如CPU使用率、内存限制等。它通过一个专门的文件系统进行操作,可实现资源分配与限制,并支持Docker等容器技术的资源管理。
|
9月前
|
存储 开发工具 开发者
揭秘 Microsoft.Docker.SDK:让容器开发更轻松的强大工具揭秘
随着云计算和容器技术的快速发展,`Docker` 已经成为容器化技术的事实标准。`Microsoft` 作为 `Docker` 的主要支持者和参与者,推出了 `Microsoft.Docker.SDK`,旨在帮助开发者更轻松地进行容器开发。本文将深入揭秘 Microsoft.Docker.SDK 的功能、使用方法以及它在容器开发中的应用。
258 13
|
9月前
|
Kubernetes 安全 数据安全/隐私保护
容器云服务是什么?
容器云基于容器技术,实现应用及其依赖的标准化封装,支持跨平台快速部署和高效管理。与传统虚拟机相比,容器共享宿主机操作系统内核,资源占用少、启动快,但隔离性稍弱。Docker Engine通过Dockerfile定义应用环境并生成容器镜像,适合单机场景;Kubernetes作为行业标准编排工具,支持自动扩缩容和服务发现,适用于大规模集群管理;OpenShift提供企业级全流程平台,满足合规要求;Rancher简化多云环境下的Kubernetes管理;CoreOS Tectonic专注于安全性,适用于高安全需求领域。容器云正朝着无服务器化、智能运维和边缘协同等方向发展。
680 2
基于simulink的光伏并网逆变器电网系统建模与仿真
本课题使用Simulink实现光伏并网逆变器的建模与仿真,该逆变器负责将光伏电池板产生的直流电转换为与电网同步的交流电。系统通过最大功率点跟踪(MPPT)、DC-DC转换、DC-AC转换及滤波处理,确保电能质量并与电网同步。Simulink模型基于MATLAB 2022a版本构建。
|
12月前
|
存储 自然语言处理 算法
【北京大学 软件工程】四、结构化分析方法
结构化分析方法是一种系统化的软件开发方法学,旨在通过使用问题域术语建立系统的功能模型,以明确“系统必须做什么”。该方法包括结构化分析、设计和程序设计三个主要部分。其核心工具是数据流图(DFD),用于表达系统功能模型,并结合数据字典定义数据流和数据存储。此外,还使用加工小说明(如判定表或判定树)描述加工逻辑。 结构化分析过程遵循自顶向下、逐步求精的原则,首先建立系统环境图确定边界,然后通过分解加工、分派数据流和引入文件来细化模型。整个过程中需确保模型平衡和信息组织的复杂性控制。最终输出为需求规格说明书(SRS),确保需求的正确性、无二义性、完整性和可验证性等特性。
|
移动开发 前端开发 JavaScript
快速上手web前端开发(超详细教程)
快速上手web前端开发(超详细教程)
|
存储 程序员
Typora设置 “图片自动保存到文档对应目录下” 的方法(亲测有效)
Typora设置 “图片自动保存到文档对应目录下” 的方法(亲测有效)
【计算机网络】—— 详解码元,传输速率的计算|网络奇缘系列|计算机网络
【计算机网络】—— 详解码元,传输速率的计算|网络奇缘系列|计算机网络
1310 0