【算法】十大排序算法(含时间复杂度、核心思想)

         以下是 **十大经典排序算法** 的时间复杂度、空间复杂度及稳定性总结,适用于面试快速回顾:

排序算法对比表

排序算法最佳时间复杂度平均时间复杂度最差时间复杂度空间复杂度稳定性核心思想
冒泡排序O(n)O(n²)O(n²)O(1)稳定相邻元素交换,大数沉底。
选择排序O(n²)O(n²)O(n²)O(1)不稳定每次选最小元素放到已排序末尾。
插入排序O(n)O(n²)O(n²)O(1)稳定将未排序元素插入已排序序列。
希尔排序O(n log n)O(n log² n)O(n log² n)O(1)不稳定分组(增量)插入排序,逐步缩小间隔。
归并排序O(n log n)O(n log n)O(n log n)O(n)稳定分治法,合并有序子序列。
快速排序O(n log n)O(n log n)O(n²)O(log n)不稳定分治法,基准值分区递归排序。
堆排序O(n log n)O(n log n)O(n log n)O(1)不稳定构建堆结构,交换堆顶与末尾。
计数排序O(n + k)O(n + k)O(n + k)O(n + k)稳定统计元素出现次数,累加输出。
桶排序O(n + k)O(n + k)O(n²)O(n + k)稳定分桶后对每个桶单独排序。
基数排序O(nk)O(nk)O(nk)O(n + k)稳定按位分配收集,从低位到高位。

关键说明

  1. 稳定性:稳定排序算法保证相等元素的相对顺序不变(如归并排序),不稳定算法可能改变(如快速排序)。

  2. 适用场景

    • 小规模数据:冒泡、插入、选择排序(简单但效率低)。
    • 大规模数据:快速、归并、堆排序(O(n log n) 复杂度)。
    • 特定数据分布
      • 整数且范围小:计数排序。
      • 均匀分布数据:桶排序。
      • 多关键字排序:基数排序。
  3. 空间复杂度

    • 原地排序:冒泡、插入、选择、希尔、堆排序(O(1) 空间)。
    • 非原地排序:归并、计数、桶、基数排序(需额外空间)。
  4. 快速排序优化

    • 三数取中法:避免最坏情况 O(n²)。
    • 小数组切换插入排序:递归到小数组时用插入排序提升效率。

面试常见问题

  1. 为什么快速排序在实际应用中比归并排序更常用?

    • 快速排序是原地排序,缓存友好;归并排序需要 O(n) 额外空间。
  2. 堆排序为什么不如快速排序快?

    • 堆排序数据访问方式跳跃(非局部性原理),缓存命中率低。
  3. 如何选择排序算法?

    • 数据规模、内存限制、稳定性需求、数据分布特征。

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

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

相关文章

安装和管理最新的Python3环境(以Mac为例)

背景: 随着大模型技术的快速发展,各种基于AI的测试技术也层出不穷,有些场景需要在较高版本的Python3环境下实现,否则可能会出现兼容性问题。另外考虑自己对于Python3的各个版本环境的管理和使用其实一直都不是特别的清楚&#xf…

【计算机网络】网络简介

文章目录 1. 局域网与广域网1.1 局域网1.2 广域网 2. 路由器和交换机3. 五元组3.1 IP和端口3.2 协议3.3 协议分层 4. OSI七层网络协议5. TCP/IP五层模型5.1 TCP/IP模型介绍5.2 网络设备所在分层 6. 封装与分用6.1 数据包的称谓6.2 封装6.3 分用 1. 局域网与广域网 1.1 局域网 …

【云馨AI-大模型】自动化部署Dify 1.1.2,无需科学上网,Linux环境轻松实现,附Docker离线安装等

Dify介绍 官网:https://dify.ai/zh生成式 AI 应用创新引擎开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力,轻松构建和运营生成式 AI 原生应用。 Dify安装脚本 目录创建 mkdir -p /data/yunxinai &&a…

人工智能和量子时代的网络安全

在不断发展的网络安全领域,人工智能和量子技术正在迅速改变游戏规则。它们的潜力有望极大地改变政府和组织保护、防御和发展系统以应对不断发展的网络威胁的方式。 人工智能 (AI) 在检测和缓解网络威胁方面表现出了巨大的潜力。人工智能算法可以快速分析大量数据、…

前端样式库推广——TailwindCss

官方网址: https://tailwindcss.com/docs/installation/using-vite 中文官方文档:https://www.tailwindcss.cn/ github地址:tailwindcss 正在使用tailwindcss的网站:https://tailwindcss.com/showcase 一看github,竟然…

《基于深度学习的指纹识别智能门禁系统》开题报告

个人主页:大数据蟒行探索者 1研究背景 1.1开发目的和意义 指纹识别作为生物特征识别领域的一项重要技术,在安全认证、犯罪侦查和个人身份验证等方面具有广泛应用前景。随着深度学习技术的迅猛发展,基于深度学习的指纹识别系统成为了当前研究…

WSL Linux 子系统download

WSL各Linux 子系统下载 WSL Linux 最新下载 微软应用商店 | Microsoft StoreWSL Linux 历史版下载复制应用商店Linux地址到转换下载地址https://store.rg-adguard.net/ Version百度网盘离线下载OracleLinux提取

Java替换jar包中class文件

在更新java应用版本的运维工作中,由于一些原因,开发没办法给到完整的jar包,这个时候,就可以只将修改后的某个Java类的class文件替换掉原来iar包中的class文件,重新启动服务即可: 1、将jar包和将要替换的cl…

23种设计模式-创建型模式-抽象工厂

文章目录 简介场景问题1. 风格一致性失控2. 对象创建硬编码3. 产品族管理失效 解决总结 简介 抽象工厂是一种创建型设计模式,可以生成相关对象系列,而无需指定它们的具体类。 场景 假设你正在写一个家具店模拟器。 你的代码这些类组成: 相…

修改服务器windows远程桌面默认端口号

修改服务器windows远程桌面默认端口号 在Windows服务器上修改远程桌面协议(RDP)的默认端口(3389)可以增强服务器的安全性,减少被恶意扫描和攻击的风险。以下是修改远程端口的详细步骤: 按 Win R 打开运行…

【MySQL】 基本查询(上)

欢迎拜访:-CSDN博客 本篇主题:【MySQL】 基本查询(上) 发布时间:2025.2.14 隶属专栏:MySQL CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) 目录 Create 基本知识…

Vue3(自定义指令directive详解)

文章目录 前言一、自定义指令的生命周期钩子二、自定义指令的创建与注册使用三、扩展 简化形式​总结 前言 在Vue3中,自定义指令是一种强大的工具,允许开发者扩展和增强HTML元素的功能。以下是对Vue3中自定义指令的详细解析: 一、自定义指令…

进制转换(R转十)(1290. 二进制转换十进制、1292. 十六进制转十进制、1291. 八进制转十进制、1405. 小丽找潜在的素数)

题单地址:题单中心-东方博宜OJ 这里以二进制转十进制为例(按位加权求和法) 1290. 二进制转换十进制 问题描述 请将一个 25 位以内的 2 进制正整数转换为 1010 进制! 输入 一个 25 位以内的二进制正整数。 输出 该数对应的…

个人博客系统 --- 测试报告

一、项目功能介绍 该项目由:登录模块、博客首页模块、博客详情页模块、博客编辑页模块四个功能模块组成。 该系统实现了个人博客的保存以及记录了发布日期、时间、发布人等信息。 二、测试内容与测试用例 我们需要对该系统进行功能测试,界面测试&…

从入门到精通【MySQL】 CRUD

文章目录 📕1. Create 新增✏️1.1 单行数据全列插入✏️1.2 单行数据指定列插入✏️1.3 多行数据指定列插入 📕2. Retrieve 检索✏️2.1 全列查询✏️2.2 指定列查询✏️2.3 查询字段为表达式✏️2.4 为查询结果指定别名✏️2.5 结果去重查询 &#x1f…

C++ 继承

目录 一、继承的概念与定义 1.1 继承的概念 1.2 继承的定义 1.2.1 语法 1.2.2 继承关系和访问限定符 1.2.3 继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、C11 final 六、继承与友元 七、继承与静态成…

Python及PyCharm配置教程:从零开始搭建开发环境

引言 Python作为一门简单易学、功能强大的编程语言,近年来在数据分析、人工智能、Web开发等领域得到了广泛应用。而PyCharm作为一款专为Python开发者设计的集成开发环境(IDE),提供了丰富的功能和工具,能够极大地提高开…

python网络爬虫开发实战之网页数据的解析提取

目录 1 XPath的使用 1.1 XPath概览 1.2 XPath常用规则 1.3 准备工作 1.4 实例引入 1.5 所有节点 1.6 节点 1.7 父节点 1.8 属性匹配 1.9 文本获取 1.10 属性获取 1.11 属性多值匹配 1.12 多属性匹配 1.13 按序选择 1.14 节点轴选择 2 Beautiful Soup 2.1 简介…

【AI】Orin Nano+ubuntu22.04上移植YoloV11,并使用DeepStream测试成功

1、准备工作 使用 sdk-manager 烧写 OrinNano, JetPack版本为6.0 DP,对应操作系统为:Ubuntu22.04 参见博客:【NVIDIA】Jetson Orin Nano系列:烧写Ubuntu22.04 2、安装 PyTorch 2.1 下载依赖 1)安装onnx pip install onnx -i https://pypi.tuna.tsinghua.edu.cn/sim…

在coze工作流中将数据回写到飞书表格

在coze工作流中将数据回写到飞书表格