|--------|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|----------|----------|------------------------------------------------------------------------------------------------|
| 排序算法 | 排序性质 | 示意图 | 特殊思想 | 就地性,稳定性 | 时间复杂度 | 定义 |
| 直接插入排序 | 基于插入 |
| 无 | 就地 可稳定 | O(n^2) | 一开始认为ai是有序区(因为一个元素没法比较) a2~an是乱序区 执行n-1趟排序:每一趟把乱序区的第一个数插入到有序区的合适的位置 |
| 希尔排序 | 基于插入(直接插入排序的优化) |
| shell增量序列 折半分组排序 | 就地,不稳定 | O(nlogn) | 对n个数进行排序: 把n个数分组 d组 一组有n/d个 先对这d组分别排序 最后统一排序 增量序列:shell增量序列(折半分组) d=n/2 , d1=d/2 d2=d1/2.....1 |
| 冒泡排序 | 基于交换 |
| 无 | 就地,稳定 | O(n^2) | 每一趟把乱序区中相邻的两个数进行比较,如不满足顺序性 则交换 |
| 快速排序 | 基于交换 |
| 递归 | 就地 不稳定 | O(nlogn) | 对于待排序的区域 选择一个基准数,把比基准数小的数 放在其前面 把比基准数大的数放在其后面 做到了基本有序 再对基准数左边和右边的区域进行同样操作----->基于递归 |
| 选择排序 | 基于选择 |
| 无 | 就地性 不稳定 | O(n^2) | 进行n-1趟排序,每次在乱序区中选择最小的数据 放到乱序区的第一个位置。 初始时全为乱序区 |
| 堆排序 | 基于选择 |
| 利用堆:基于完全二叉树的数据结构 | 就地排序 不稳定 | O(nlogn) | 对找最大值最小值的优化 内容比较多,去排序算法学习 |
| 归并排序 | 基于选择 | 
| 递归/分治 | 非就地,可稳定 | O(nlogn) | 对n个数进行归并排序,将n个数从中间分成两个序列(分成两半) 先通过归并排序将这两部分都变为有序的, 再将这两部分有序序列合并成一个有序序列即可 |
| 计数排序 | 基于统计(以空间换时间) |
| 无 | 非就地 | O(n) | count统计每个数据出现的次数,用待排序的数据大小表示cnt下标 最后出现多少次直接输出就行了 |
排序算法总结表格
_Narcissus_2026-08-21 16:02
相关推荐
djarmy2 小时前
MAIN.c(1): warning C318: can’t open file ‘STC8G.H’ 报错 解决 分析David猪大卫3 小时前
【C++修炼】智能指针使用及原理李永奉4 小时前
中科蓝讯SDK开发-BT893x 面条耳机连接vivo手机后连接APP端,最后手机端设置页面手动断开蓝牙连接,此时耳机端假断开2601_967760784 小时前
2026年PDF压缩与页码添加工具技术实测:性能、算法与本地化适配深度对比零衣贰4 小时前
The 2026 ICPC Asia East Continent Online Contest (I) 题解不会就选b5 小时前
算法日常・每日刷题--<贪心>7moonrailgun5 小时前
用 Node.js 复刻 Codex Astra 的终端星光fpcc5 小时前
c++编程实践—统一初始化罗西的思考5 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(1)--- 总体Zenova EdgeOS6 小时前
C++ 工业边缘 libcurl HTTP 客户端实战