排序算法总结表格

|--------|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|----------|----------|------------------------------------------------------------------------------------------------|
| 排序算法 | 排序性质 | 示意图 | 特殊思想 | 就地性,稳定性 | 时间复杂度 | 定义 |
| 直接插入排序 | 基于插入 | | 无 | 就地 可稳定 | 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下标 最后出现多少次直接输出就行了 |

相关推荐
朔北之忘 Clancy14 小时前
2025 CSP-J 第二轮真题解析
c++·青少年编程·题解·noip·csp·信奥赛·noi
longlongzihan14 小时前
LeetCode 17电话号码的字母组合:回溯算法(DFS)详解
c++·算法·leetcode·深度优先
yolo_guo14 小时前
调试mysql延迟与libevent回调实际发送回复时机问题
c++·mysql·libevent
封印师请假去地球钓鱼14 小时前
边解边变的问题:从“决策依赖“一词出发
人工智能·算法
今晚打老虎15 小时前
c++之提高A(前缀和)(第三课)
数据结构·c++·算法
an123212116 小时前
ARM嵌入式学习笔记:SPI通信协议详解
arm开发·笔记·学习
不会就选b16 小时前
算法日常・每日刷题--<贪心>26
数据结构·算法
by2099916 小时前
从结构体到对象:正式学习C++类的骨架、封装与this指针
c++·经验分享·学习
2601_9622186117 小时前
C语言中三种库的编译和使用方法
开发语言·c++
铅笔小新z17 小时前
【C语言】操作符
c语言