【总结】排序算法的时间复杂度和空间复杂度

发布时间 2023-08-12 17:49:34作者: 仔仔的棒棒糖

排序算法的时间复杂度和空间复杂度

最好时间复杂度最坏时间复杂度 平均时间复杂度 空间复杂度是否为稳定排序是否为原地排序
冒泡排序 $O(n)$ 初始数组正序 $O(n^2)$ 初始数组逆序 $O(n^2)$ $O(1)$
原地使用数组,无额外内存开销
插入排序
选择排序 $O(n^2)$ [每一趟都选出最值,一趟为 $O(n)$,一共跑$n$趟]
希尔排序 $O(n)$ $O(n^2)$ $O(n^{1.3}$)
快速排序 $O(nlogn)$ $O(n^2)$每次都取到的是最大值 $O(nlogn)$ $O(logn)$
[递归栈的深度]
堆排序 $O(nlogn)$
堆排序时间复杂度分析:堆调整的时间复杂度为$O(logn)$对n元素进行堆调整时间复杂度为 $O(nlogn)$]
堆调整时间复杂度分析:根节点和排在最后的序号为i的叶子结点交换,堆调整的操作次数=树的深度=$logn$
$O(1)$
原地使用数组,无额外内存开销
归并排序
划分区间的时间复杂度:$O(logn)$
归并$n$层的时间复杂度:$O(nlogn)$
归并每层的时间复杂度:$O(n)$ 归并的层数:$logn$
总时间复杂度:$O(nlogn)+ O(logn)=O(nlogn)$
$O(n+logn)$
[$logn$: 递归栈的深度]
[$n$: 辅助储存结果数组的长度]
计数排序 $O(n+k)$
$k$为辅助桶的数据范围(数组最大值-最小值)
求最大最小值:$O(n)$
遍历装入桶:$O(n)$
循环输出元素:$O(k)$
$O(n+k)$
$n$:保存输出结果的数组
$k$:辅助桶数组
将输出结果直接覆盖到原数组,空间复杂度可将为$O(k)$
桶排序 $O(n+k)$ $O(k)$
基数排序 $O(n*m)$

分类