排序算法对比

简介: 本文对比九种常见排序算法。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天前
|
Web App开发 缓存 安全
《Chrome非必要服务的精细化关闭指南》
本文针对Chrome版本迭代中功能堆叠带来的隐性性能损耗问题,从后台网络服务、进程架构、扩展权限、闲置标签回收、渲染管线、媒体设备服务、缓存存储等多个维度,系统拆解了非必要默认功能的性能裁剪路径与底层逻辑,提出精细化权限收束、参数调优、渐进式验证的实操方案。文章指出通用软件的默认均衡配置存在大量场景冗余,通过针对性裁撤无用特性、收拢资源开销,可释放可观的运行余量,核心思路是让工具适配个体使用场景,而非被动接受全量功能预设。
|
1天前
|
人工智能 JavaScript 测试技术
Skills实战:从0到1写一个你自己的失败截图Skill
自动化用例失败后手工翻日志?太低效!本文介绍“失败截图Skill”——AI驱动的现场封存技术:在断言失败瞬间自动截取界面、日志、网络等多维证据,并无缝集成报告。零侵入、高精准、强回溯,让调试从“碰运气”变为“看证据”。
|
1天前
|
人工智能 前端开发 JavaScript
用 Leonxlnx/taste-skill 给 AI 前端降降味
`Leonxlnx/taste-skill` 是专治 AI 前端“廉价感”的审美框架,非组件库,而是一份写给 AI 编码工具(如 Cursor、v0)的 `SKILL.md` 设计守则。它通过 `DESIGN_VARIANCE` 等三个可调旋钮,约束布局、动效与密度,并内置反模版规则(禁紫蓝渐变、假卡片、无源数据等),让 AI 先审稿、再编码。
46 0
|
1天前
|
自然语言处理 API 开发工具
阿里云自然语言处理全栈对接指南:从入门到企业级集成实战
阿里云自然语言处理依托通义千问大模型,支持100+语言,提供情感分析、NER、对话分析等全栈API;兼容Java/Python/Node.js/PHP/C++/Go多语言SDK,并集成百炼平台OpenAI兼容接口,助力企业快速构建智能客服、舆情分析等AI应用。(239字)
|
1天前
|
存储 弹性计算 人工智能
什么是云服务器ECS?ECS优势、购买、使用方式和部署建议
阿里云ECS是高性能、高可靠的IaaS级弹性云服务器,免自建机房,即开即用、弹性伸缩。支持x86/ARM/GPU多架构,单实例可用性99.975%,搭载自研CIPU芯片,广泛适用于网站、AI、数据库、游戏等全场景。阿里云服务器ECS官网:https://t.aliyun.com/U/AZBUsA
|
1天前
|
JSON 安全 JavaScript
静态扫描工具第二讲-Horusec
Horusec是一款极速开源SAST工具,18种语言一键扫描,3分钟出报告(较Semgrep提速10倍),深度检测漏洞与Git历史密钥泄露,支持CLI/CI/CD及自定义规则,简单高效、开箱即用。
33 0
|
1天前
|
缓存 JSON 监控
【剪映小助手】添加关键帧接口(Add Keyframes)
添加关键帧接口(`/v1/add_keyframes`)用于向剪映草稿视觉片段批量注入动画关键帧,支持位置、缩放、旋转、透明度等属性。依赖路由、服务、关键帧引擎与缓存模块,具备完备校验、错误码体系及LRU缓存优化,单次建议≤100帧。(239字)
|
1天前
|
人工智能 自然语言处理 数据可视化
阿里云万小智AI建站收费标准:15元1个月起(轻量版/标准版/高级版)免费送CN域名
阿里云万小智AI建站,零代码10分钟建站,新客15元/月起,买3年8折、5年7折;购即赠.CN域名+SSL证书+备案码,支持内地(需备案)或香港(免备案)节点,首年还送2000灵感值。阿里云万小智官网:https://t.aliyun.com/U/FmBHHe
|
1天前
|
人工智能 弹性计算 API
OpenClaw+阿里云百炼Token Plan 一站式部署与配置流程
OpenClaw作为一款开源可自托管的AI智能体执行框架,能让大模型从单纯对话升级为可执行文件处理、代码编写、流程自动化等任务的数字助手。在阿里云上部署OpenClaw并接入百炼Token Plan,可依托阿里云稳定的云服务与百炼的大模型能力,打造专属、高效、低成本的AI智能体服务。本文将从准备工作、阿里云服务器部署、百炼Token Plan开通与密钥获取、OpenClaw配置、功能验证到常见问题排查,提供完整实操流程,帮助用户快速完成部署与配置。
55 9
|
1天前
|
存储 人工智能 机器人
AI Agent的三重记忆机制:打造高可用的多维记忆系统
本文深度解析AI Agent三大核心记忆架构:RAG(聚焦“来源说了什么”,保障答案可溯源)、Agent Memory(解决“该记住什么”,实现跨会话连续性)与知识图谱(厘清“事物如何关联”,支撑多跳推理)。三者定位迥异,需依问题本质精准选型,避免技术错配。
48 4
AI Agent的三重记忆机制:打造高可用的多维记忆系统