排序算法总结表格

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

相关推荐
小雪崩1 小时前
嵌入式学习 day27:标准IO
linux·c语言·学习
一只小小的芙厨2 小时前
前缀和与差分
数据结构·算法
船厂电气自动化ai大模型2 小时前
AI大模型与数学第42课:泰勒级数完整展开(神经网络近似核心)
人工智能·python·深度学习·算法·机器学习
从琳开始9892 小时前
优选算法——双指针(算法原理+力扣题)
算法·leetcode·职场和发展
从琳开始9892 小时前
优选算法——滑动窗口(概念+解题模板+LeetCode例题讲解)
算法·leetcode·职场和发展
Nil2082 小时前
leetcode 94二叉树的中序遍历
算法·leetcode·职场和发展
兔兔兔兔12 小时前
记录C++ 8
开发语言·c++
不会就选b2 小时前
算法日常・每日刷题
算法
一只小小的芙厨3 小时前
最短路总结
数据结构·算法