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

常见排序算法性能对比

排序算法是计算机科学中将一个数据集合按照特定顺序如升序或降序重新排列的算法。根据是否通过比较元素来决定次序主要分为比较排序和非比较排序两大类 。常见排序算法对比下表对几种主流排序算法的核心特性进行了对比 算法名称平均时间复杂度最坏时间复杂度空间复杂度是否稳定核心思想冒泡排序O(n²)O(n²)O(1)稳定重复遍历依次比较相邻元素将最大/小元素“冒泡”到末尾。选择排序O(n²)O(n²)O(1)不稳定每次从未排序部分选择最小或最大元素放到已排序序列的末尾。插入排序O(n²)O(n²)O(1)稳定构建有序序列对于未排序数据在已排序序列中从后向前扫描找到相应位置并插入。希尔排序O(n¹·³)O(n²)O(1)不稳定插入排序的改进通过将数组按增量分组对每组进行插入排序逐步缩小增量至1。归并排序O(n log n)O(n log n)O(n)稳定分治法。将数组递归地分成两半分别排序然后将两个有序子数组合并成一个有序数组 。快速排序O(n log n)O(n²)O(log n)不稳定分治法。选取一个基准将数组分为小于基准和大于基准的两部分递归地对这两部分排序。堆排序O(n log n)O(n log n)O(1)不稳定利用堆一种完全二叉树数据结构将数组构建成大顶堆然后重复将堆顶元素最大与末尾交换并调整堆。计数排序O(n k)O(n k)O(n k)稳定非比较排序。适用于数据范围k不大的整数。统计每个值的出现次数然后按顺序输出。基数排序O(d * (n k))O(d * (n k))O(n k)稳定非比较排序。按位个位、十位...进行稳定排序如计数排序从低位到高位。算法原理与代码实现1. 冒泡排序每一轮遍历比较相邻元素如果顺序错误就交换这样每一轮都会将当前未排序部分的最大值“冒泡”到正确位置 。def bubble_sort(arr): n len(arr) for i in range(n - 1): # 进行 n-1 轮比较 swapped False for j in range(n - 1 - i): # 每轮比较的范围逐渐缩小 if arr[j] arr[j 1]: # 如果顺序错误则交换 arr[j], arr[j 1] arr[j 1], arr[j] swapped True if not swapped: # 如果一轮没有交换说明已有序可提前结束 break return arr # 示例 arr [64, 34, 25, 12, 22, 11, 90] print(bubble_sort(arr)) # 输出: [11, 12, 22, 25, 34, 64, 90]2. 选择排序算法在未排序序列中找到最小元素存放到排序序列的起始位置然后再从剩余未排序元素中继续寻找最小元素放到已排序序列的末尾以此类推 。def selection_sort(arr): n len(arr) for i in range(n - 1): # 进行 n-1 轮选择 min_idx i # 假设当前位置为最小值索引 for j in range(i 1, n): # 在未排序部分寻找更小的值 if arr[j] arr[min_idx]: min_idx j arr[i], arr[min_idx] arr[min_idx], arr[i] # 将找到的最小值与当前位置交换 return arr # 示例 arr [64, 25, 12, 22, 11] print(selection_sort(arr)) # 输出: [11, 12, 22, 25, 64]3. 插入排序将数组视为已排序和未排序两部分。初始时已排序部分只包含第一个元素。然后依次将未排序部分的元素插入到已排序部分的正确位置 。def insertion_sort(arr): n len(arr) for i in range(1, n): # 从第二个元素开始视为待插入元素 key arr[i] # 当前待插入的元素 j i - 1 # 将比 key 大的元素向后移动一位为 key 腾出位置 while j 0 and key arr[j]: arr[j 1] arr[j] j - 1 arr[j 1] key # 将 key 插入到正确位置 return arr # 示例 arr [12, 11, 13, 5, 6] print(insertion_sort(arr)) # 输出: [5, 6, 11, 12, 13]4. 归并排序采用分治法将数组递归地分成两半直到每个子数组只有一个元素自然有序然后将这些有序子数组合并起来 。def merge_sort(arr): if len(arr) 1: return arr # 1. 分解找到中间点将数组分成两半 mid len(arr) // 2 left_half arr[:mid] right_half arr[mid:] # 2. 解决递归地对左右两半进行排序 left_sorted merge_sort(left_half) right_sorted merge_sort(right_half) # 3. 合并将两个有序数组合并成一个 return merge(left_sorted, right_sorted) def merge(left, right): result [] i j 0 # 比较两个数组的头部将较小的放入结果数组 while i len(left) and j len(right): if left[i] right[j]: result.append(left[i]) i 1 else: result.append(right[j]) j 1 # 将剩余元素追加到结果数组 result.extend(left[i:]) result.extend(right[j:]) return result # 示例 arr [38, 27, 43, 3, 9, 82, 10] print(merge_sort(arr)) # 输出: [3, 9, 10, 27, 38, 43, 82]5. 快速排序选择一个元素作为“基准”将数组重新排列所有比基准小的放在基准前面比基准大的放在后面。然后递归地对基准前后的子数组进行快速排序 。def quick_sort(arr): if len(arr) 1: return arr # 选择中间元素作为基准 pivot arr[len(arr) // 2] left [x for x in arr if x pivot] middle [x for x in arr if x pivot] right [x for x in arr if x pivot] # 递归排序并合并 return quick_sort(left) middle quick_sort(right) # 示例 arr [10, 7, 8, 9, 1, 5] print(quick_sort(arr)) # 输出: [1, 5, 7, 8, 9, 10]特殊排序算法Stalin Sort这是一种非标准的、带有讽刺意味的“高效”算法。其核心思想是遍历数组只保留那些不破坏非递减顺序的元素而直接“移除”忽略任何比前一个保留元素小的元素从而实现“排序” 。def stalin_sort(arr): if not arr: return [] result [arr[0]] # 总是保留第一个元素 max_so_far arr[0] for i in range(1, len(arr)): if arr[i] max_so_far: # 只有当前元素不小于当前最大值时才保留 result.append(arr[i]) max_so_far arr[i] # 否则该元素被“移除”忽略 return result # 示例 arr [1, 2, 5, 3, 5, 7, 4, 9] print(stalin_sort(arr)) # 输出: [1, 2, 5, 5, 7, 9] # 注意原数组中的 3 和 4 被移除了结果序列是非递减的但已不是原数组的完整集合。算法选择与适用场景小规模或基本有序数据插入排序简单高效是许多高级算法如TimSort在小规模数据上的 fallback 选择 。通用且高效的比较排序快速排序在平均情况下性能极佳是许多语言标准库的默认排序实现。归并排序稳定且时间复杂度稳定为 O(n log n)常用于需要稳定排序或链表排序的场景 。原地排序且对空间有严格要求堆排序能保证最坏情况下的 O(n log n) 时间复杂度且只需要常数额外空间适用于内存受限环境 。非比较排序当数据是有限范围内的整数时计数排序和基数排序可以在 O(n) 时间内完成排序效率远超比较排序 。教学与理解冒泡排序和选择排序因其思路直观常被用于算法入门教学但在实际应用中因其 O(n²) 的时间复杂度而较少使用 。参考来源pythonsort函数时间复杂度_合并排序算法——时间复杂度详解和python代码实现排序算法详解选择排序算法详解含Python实现Java数据结构与算法_05 时间复杂度常用排序算法 冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序Java 四大基础排序算法详解冒泡、选择、插入与希尔排序Stalin Sort完全指南从原理到实现手把手教你掌握这个高效排序算法

相关文章:

常见排序算法性能对比

排序算法是计算机科学中将一个数据集合按照特定顺序(如升序或降序)重新排列的算法。根据是否通过比较元素来决定次序,主要分为比较排序和非比较排序两大类 。 常见排序算法对比 下表对几种主流排序算法的核心特性进行了对比 : …...

2026年权威解读:AI搜索优化源头服务商横向测评,杭州9大公司选购攻略

随着AI大模型成为信息获取的主流入口,GEO(生成式引擎优化)正迅速取代传统SEO,成为企业数字营销的必争之地。然而,面对市场上层出不穷的GEO工具与服务,企业主们往往陷入选择困境:是选择短期见效的…...

2026年权威发布:AI搜索优化源头服务商深度测评,杭州7大GEO优化解决方案避坑指南

在2026年的今天,AI搜索已成为企业获取精准流量、建立用户心智的首要入口。传统搜索引擎优化(SEO)的逻辑正在被生成式引擎优化(GEO)快速迭代,其核心从“匹配关键词”转向“成为标准答案”。面对这一剧变&…...

GEO系统贴牌深度解析:杭州爱搜索如何助力企业构建AI搜索时代的自主营销阵地

核心参数解析与全平台覆盖能力概览在AI搜索时代,信息获取的逻辑正发生根本性转变。传统搜索引擎依赖关键词匹配和链接分析,而AI大模型(如ChatGPT、DeepSeek、豆包等)则基于对海量语料的理解,直接生成答案。这意味着&am…...

5个核心功能+3种应用场景:NSC_BUILDER让您的Switch游戏管理更高效

5个核心功能3种应用场景:NSC_BUILDER让您的Switch游戏管理更高效 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titleright…...

如何快速获取中兴光猫完整权限:新手友好的终极指南

如何快速获取中兴光猫完整权限:新手友好的终极指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 你是否曾因中兴光猫的管理限制而感到困扰?想调整网络参数却找…...

【多旋翼无人机姿态估计】适用于无人机的姿态估计算法,聚焦于线性与非线性姿态估计器的开发与测试,以及在不同飞行条件与环境下的估计

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...

基于微信小程序的驾校预约平台(文档+源码)_kaic

第5章 系统实现进入到这个环节,也就可以及时检查出前面设计的需求是否可靠了。一个设计良好的方案在运用于系统实现中,是会帮助系统编制人员节省时间,并提升开发效率的。所以在系统的编程阶段,也就是系统实现阶段,对于…...

【多线路故障】含sop的配电网故障重构研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...

新概念英语第二册36_Across the channel

Lesson 36: Across the channel 横渡海峡Key words and expressions Debbie Hart 黛比哈特set up a world record 创立一个世界纪录train v. 训练anxiously 焦急地intend 打算solid 固体的,硬…...

FanControl完全指南:3步掌握Windows风扇智能控制艺术

FanControl完全指南:3步掌握Windows风扇智能控制艺术 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/…...

035、嵌入式与边缘场景:轻量化Agent的挑战与设计

一、从一次深夜调试说起 上周在客户现场蹲到凌晨三点,就为了查一个内存泄漏。Agent在树莓派4B上跑了72小时之后,进程突然僵死,看门狗都没拉回来。最后发现是JSON解析库在反复分配小内存块,碎片把32位系统的用户空间挤爆了。这件事让我重新审视边缘场景的残酷性:这里没有K…...

LLM论文高效阅读指南:从Awesome列表到知识体系构建

1. 项目概述与核心价值最近在整理自己的知识库,发现一个挺有意思的现象:无论是刚入行的新人,还是像我这样在AI领域摸爬滚打了十来年的老手,面对大语言模型(LLM)这个日新月异的领域,都或多或少会…...

034、监控与可观测性:日志、指标与追踪

从一次深夜告警说起 上周三凌晨两点,手机突然狂震——生产环境某个AI推理服务响应时间飙到了5秒。打开监控面板,CPU和内存曲线平稳得可疑,日志里只有零星几个WARNING,但业务侧投诉已经堆了十几条。这种“系统看起来正常但实际已瘫痪”的场面,相信各位都遇到过。问题最终定…...

Keras函数式API实战:构建复杂深度学习模型

1. Keras函数式API入门指南作为深度学习领域最受欢迎的框架之一,Keras提供了两种主要的模型构建方式:Sequential顺序模型和Functional函数式API。我在实际项目中发现,虽然Sequential模型简单易用,但当需要构建复杂网络结构时&…...

如何快速解决ComfyUI插件节点缺失问题:3步修复FaceDetailer等核心功能

如何快速解决ComfyUI插件节点缺失问题:3步修复FaceDetailer等核心功能 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目…...

Onekey:打破Steam游戏清单获取的技术壁垒,让复杂操作变得简单快速

Onekey:打破Steam游戏清单获取的技术壁垒,让复杂操作变得简单快速 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 你是否曾经为了获取Steam游戏的Depot清单而头疼不已&am…...

Windhawk终极指南:如何像搭积木一样定制你的Windows系统

Windhawk终极指南:如何像搭积木一样定制你的Windows系统 【免费下载链接】windhawk The customization marketplace for Windows programs: https://windhawk.net/ 项目地址: https://gitcode.com/gh_mirrors/wi/windhawk 厌倦了Windows系统千篇一律的界面和…...

3分钟零门槛获取百度网盘提取码:智能工具彻底解放你的搜索时间

3分钟零门槛获取百度网盘提取码:智能工具彻底解放你的搜索时间 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜找到心仪的学习资料,却被一个简单的提取码拦在门外?那种感觉…...

VisualCppRedist AIO:微软Visual C++运行库一键修复与部署的终极解决方案

VisualCppRedist AIO:微软Visual C运行库一键修复与部署的终极解决方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist VisualCppRedist AIO是一个全…...

告别手动保存:如何用douyin-downloader将抖音素材获取效率提升300%

告别手动保存:如何用douyin-downloader将抖音素材获取效率提升300% 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fa…...

2025最权威的降AI率平台推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 若是要降低知网AI检测的比例,那就得从写作这个起始的源头去规避模型生成所留下的…...

AMD Ryzen SMU调试工具深度解析:硬件底层访问与性能调优实战指南

AMD Ryzen SMU调试工具深度解析:硬件底层访问与性能调优实战指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: …...

微信聊天记录导出终极指南:WeChatMsg项目完整解决方案

微信聊天记录导出终极指南:WeChatMsg项目完整解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…...

TMSpeech:构建Windows本地实时语音识别系统的完整指南

TMSpeech:构建Windows本地实时语音识别系统的完整指南 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech TMSpeech是一款基于开源框架的Windows桌面应用,专注于实现完全离线的实时语音转文字功能…...

C++的输入和输出流详解

输入和输出流从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准I/O。从磁盘文件输入数据,数据输出到磁盘文件简称文件I/O。对内存中指定的空间进行输入输出,通常指定一个字符数组作为存储空间&#xff0…...

别再为Unity WebGL播放本地视频发愁了!VideoPlayer + StreamingAssets保姆级避坑指南

Unity WebGL本地视频播放全攻略:VideoPlayer与StreamingAssets深度解析 第一次在Unity WebGL项目中尝试播放本地视频时,我遇到了一个令人抓狂的问题——视频在编辑器里运行完美,但打包后却死活不显示。经过整整两天的调试才发现,原…...

ComfyUI-Florence2终极指南:15种视觉任务的完整解决方案

ComfyUI-Florence2终极指南:15种视觉任务的完整解决方案 【免费下载链接】ComfyUI-Florence2 Inference Microsoft Florence2 VLM 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Florence2 ComfyUI-Florence2 是一款基于Microsoft Florence2视觉语言…...

电池销售系统|基于java + vue电池销售系统(源码+数据库+文档)

电池销售系统 目录 基于springboot vue电池销售系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue电池销售系统 一、前言 博主介绍:✌…...

Windows Cleaner深度指南:彻底解决C盘爆红和系统卡顿的终极方案

Windows Cleaner深度指南:彻底解决C盘爆红和系统卡顿的终极方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否曾经遇到过这样的情况&#xff…...