排序算法对比

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 本文对比九种常见排序算法。O(n²)级中插入排序适合小规模或基本有序数据;O(n log n)级中快排实际最快但不稳定,归并稳定但需额外空间,堆排空间最优且性能稳定;基数排序线性时间处理整数。选型需根据数据规模、稳定性和内存限制综合考量。

1 对比总览

排序算法 核心思想 最好时间复杂度 最坏时间复杂度 平均时间复杂度 空间复杂度 稳定性
插入排序 将待排序元素插入到已有序序列的合适位置 O(n) O(n²) O(n²) O(1) ✅ 稳定
折半插入排序 用折半查找优化插入位置的查找过程 O(n log n) O(n²) O(n²) O(1) ✅ 稳定
希尔排序 分组插入排序,逐步缩小增量 O(n) O(n²) O(n^1.3~n²) O(1) ❌ 不稳定
冒泡排序 相邻元素两两比较,将较大元素逐步"冒泡"到末尾 O(n) O(n²) O(n²) O(1) ✅ 稳定
快速排序 选取基准,分治递归地将序列分为小于和大于基准的两部分 O(n log n) O(n²) O(n log n) O(log n)~O(n) ❌ 不稳定
简单选择排序 每趟选择未排序部分的最小元素放到已排序末尾 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(d·(n+k)) O(d·(n+k)) O(d·(n+k)) O(n+k) ✅ 稳定

注:基数排序中,d 为最大位数,k 为基数(如十进制 k=10)。


2 详细说明

2.1 插入排序

  • 核心思想:将数组分为已排序和未排序两部分,每次从未排序部分取出第一个元素,在已排序部分从后往前依次比较,找到合适位置插入。

  • 适用场景:数据量小(n < 50)或数据基本有序时效率很高。

  • 特点:实现简单,稳定,在接近有序时性能接近 O(n)。

2.2 折半插入排序

  • 核心思想:在插入排序的基础上,利用折半查找(二分查找)在已排序序列中快速定位插入位置,减少比较次数。

  • 特点:相比直接插入排序减少了比较次数,但移动次数不变,整体时间复杂度仍为 O(n²)。

2.3 希尔排序

  • 核心思想:将序列按一定增量分组,对每组进行插入排序;逐步减小增量,当增量为 1 时整个序列基本有序,最后做一次完整插入排序。

  • 增量序列:常见的有 Hibbard 增量(2^k-1)、Sedgewick 增量等,不同增量序列影响时间复杂度。

  • 特点:第一个突破 O(n²) 的排序算法,是插入排序的改进版。

2.4 冒泡排序

  • 核心思想:从前往后依次比较相邻元素,若逆序则交换,每趟将当前未排序部分的最大元素"冒泡"到末尾。

  • 优化方案:设置标志位,若一趟遍历没有发生交换说明已有序,可提前结束。

  • 特点:简单直观,速度较慢,适合教学场景。

2.5 快速排序

  • 核心思想:选择一个基准元素(pivot),将序列分成两部分——小于等于基准的在左边,大于基准的在右边,然后递归地对左右两部分排序。

  • 最坏情况:每次选择的基准恰好是最大或最小元素,退化为 O(n²);可通过随机选取基准或三数取中法优化。

  • 特点:实际应用中最快的排序算法之一,C 标准库的 qsort 即采用此算法。

2.6 简单选择排序

  • 核心思想:每趟在未排序部分中找到最小(或最大)元素,将其与未排序部分的第一个元素交换。

  • 特点:比较次数始终为 O(n²),与初始序列无关;但移动次数较少。

2.7 堆排序

  • 核心思想:将序列构建成一个大顶堆(或小顶堆),每次取出堆顶元素(最大值或最小值),将堆尾元素移到堆顶后调整堆,重复 n-1 次。

  • 特点:始终保持在 O(n log n) 的时间复杂度,不受初始序列影响;但不稳定。

2.8 归并排序

  • 核心思想:采用分治策略,将序列递归地二分至单个元素,然后逐层合并两个有序子序列。

  • 实现方式:分为自上而下的递归实现和自下而上的迭代实现。

  • 特点:稳定排序,效率稳定在 O(n log n),但需要 O(n) 的额外空间。

2.9 基数排序

  • 核心思想:不直接比较元素大小,而是按位数(个位、十位、百位…)依次进行分配(入桶)和收集(出桶)。

  • 实现方式

    • LSD(Least Significant Digit):从最低位开始排序

    • MSD(Most Significant Digit):从最高位开始排序

  • 特点:非比较排序,适用于整数或固定长度字符串,时间复杂度为线性。

目录
相关文章
|
1月前
|
SQL JSON 关系型数据库
企业级多模态分析计算引擎选型:阿里云 AnalyticDB MySQL 统一分析平台方案
阿里云AnalyticDB MySQL版是PB级云原生实时数据仓库,首创多模态统一分析引擎,单SQL原生支持SQL分析、向量检索、全文搜索与JSON分析,替代3–5套独立系统,综合成本降50%+,运维复杂度降80%,适用于AI+数据融合、多源异构统一查询等企业级场景。
215 17
企业级多模态分析计算引擎选型:阿里云 AnalyticDB MySQL 统一分析平台方案
|
28天前
|
人工智能 前端开发 JavaScript
用 Leonxlnx/taste-skill 给 AI 前端降降味
`Leonxlnx/taste-skill` 是专治 AI 前端“廉价感”的审美框架,非组件库,而是一份写给 AI 编码工具(如 Cursor、v0)的 `SKILL.md` 设计守则。它通过 `DESIGN_VARIANCE` 等三个可调旋钮,约束布局、动效与密度,并内置反模版规则(禁紫蓝渐变、假卡片、无源数据等),让 AI 先审稿、再编码。
291 0
|
1月前
|
存储 人工智能 算法
告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
TrendRadar 是一个轻量级、易部署的热点新闻聚合与推送工具。它能够从知乎、抖音、B站、微博、百度、华尔街见闻等11个主流平台抓取热搜榜单,然后根据你设定的关键词进行智能筛选,最终将你最关心的内容推送到手机或邮箱。
438 13
 告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
|
1月前
|
API
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态。
207 26
|
28天前
|
人工智能 弹性计算 API
OpenClaw+阿里云百炼Token Plan 一站式部署与配置流程
OpenClaw作为一款开源可自托管的AI智能体执行框架,能让大模型从单纯对话升级为可执行文件处理、代码编写、流程自动化等任务的数字助手。在阿里云上部署OpenClaw并接入百炼Token Plan,可依托阿里云稳定的云服务与百炼的大模型能力,打造专属、高效、低成本的AI智能体服务。本文将从准备工作、阿里云服务器部署、百炼Token Plan开通与密钥获取、OpenClaw配置、功能验证到常见问题排查,提供完整实操流程,帮助用户快速完成部署与配置。
354 9
|
18天前
|
人工智能 缓存 自然语言处理
2026年阿里云百炼大模型服务平台全解析:功能、订阅、计费与接入指南
阿里云百炼大模型服务平台是面向企业与开发者的一站式AI服务底座,整合通义千问全系列及第三方优质模型,提供从模型调用、定制调优到应用构建的全链路能力,2026年全面升级后,以多模型生态、灵活计费与极简接入为核心优势,降低大模型落地门槛,支撑智能问答、代码开发、内容创作、数据分析等多元场景。
348 3
|
1月前
|
人工智能 机器人 Shell
专访 Bub 作者们:如何开发一个好记性又懂人的 Agent
这期播客主要聊了 Bub 是什么、它和普通聊天机器人/Agent 框架有什么不同,以及它背后的 Tape 记忆机制和插件化设计。简单来说,Bub 可以理解成一个以 channel 为中心的 AI Agent 框架。它不是只在命令行里写代码,也不只是一个群聊机器人,而是希望把不同 IM、命令行、工具、记忆和运行上下文连接起来,让用户可以根据自己的场景做一个定制版 Agent。
237 9
|
28天前
|
人工智能 数据可视化 定位技术
CodeGraph vs Understand-Anything:一个给 Agent 查代码地图,一个把项目变成可追问图谱
CodeGraph 与 Understand-Anything 同解“代码迷路”之困:前者是面向编程 Agent 的本地索引工具,专注快速查询调用链、影响范围与上下文;后者是面向人与团队的交互式项目图谱,提供可视化架构、业务域导览与系统理解。二者互补而非替代——一重执行精度,一重认知全局。(239字)
370 1
CodeGraph vs Understand-Anything:一个给 Agent 查代码地图,一个把项目变成可追问图谱
|
28天前
|
人工智能 安全 前端开发
ECC 讲透:Claude Code 的全能增强包,不只是 Agents 和 Skills
Everything Claude Code(ECC)是2026年爆火的AI编程增强框架,非简单提示词合集,而是集Agents、Skills、Rules、Hooks、MCP与AgentShield安全扫描于一体的“AI编程操作系统”,深度优化Claude Code等Agent Harness,已获近19万Star。(239字)
260 2
ECC 讲透:Claude Code 的全能增强包,不只是 Agents 和 Skills
|
2月前
|
机器学习/深度学习 数据采集 人工智能
金属外表多种生锈检测数据集分享(适用于YOLO系列深度学习分类检测任务)
本数据集含1202张真实工业场景金属锈蚀图像,标注4类典型锈蚀(缝隙腐蚀、点蚀、均匀腐蚀、一般性腐蚀),采用YOLO标准格式(txt),已划分train/val/test(90:8.4:1.6),适用于YOLO等目标检测模型训练,助力工业智能巡检。
186 2