由LeetCode排序引起的排序算法总结
来源:互联网 发布:网络销售是正规工作么 编辑:程序博客网 时间:2024/06/05 07:42
1.排序算法总览
冒泡排序、选择排序、插入排序,交换排序,时间复杂度为O(n^2);
快速排序、归并排序、堆排序时间复杂度为O(nlogn);
基数排序、计数排序,划分排序,桶排序,时间复杂度都是O(n)
1.排序算法稳定性与不稳定行比较
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
2.不同排序算法性能比较框图
排序算法
平均时间复杂度
最差时间复杂度
额外空间复杂度
稳定性
备注
冒泡排序
o(n^2)
o(n^2)
o(1)
稳定
n小时效果好
选择排序
o(n^2)
o(n^2)
o(1)
不稳定
n小时效果好
交换排序
o(n^2)
o(n^2)
o(1)
不稳定
n小时效果好
插入排序
o(n^2)
o(n^2)
o(1)
稳定
n小时效果好
快速排序
o(nlogn)
o(n^2)
o(nlogn)-o(n)
不稳定
n大时效果好
归并排序
o(nlogn)
o(nlogn)
o(n)
稳定
n大时效果好
堆排序
o(nlogn)
o(nlogn)
o(1)
不稳定
n大时效果好
希尔排序
o(nlogn)
o(ns) 1<s<2
o(1)
不稳定
s是所选分组
基数排序
o(logRB)(线性复杂度)
o(logRB)
o(n)
稳定
B是真数(0-9),
R是基数(个十百)
计数排序
o(n)
o(nlogn) 稳定0
划分排序
o(n)
0
0
稳定
0
桶排序
o(n)
0
0
稳定
0
快速排序空间复杂度解析:快速排序来说,没有申请额外的空间,为什么空间复杂度不是O(1)呢,原来啊,快速排序用了递归来实现,
而递归的话,就造成了栈空间的使用,递归树的深度为(logn),因此快排的空间复杂度为O(nlogn)
堆排序空间复杂度解析:堆排序是就地排序,并没有申请额外的存储空间(最多就是交换时,使用的临时变量),因此空间复杂度为O(1)
2.算法时间复杂度初识
时间复杂度:时间复杂度是指执行算法所需要的计算工作量
空间复杂度:而空间复杂度是指执行这个算法所需要的内存空间
- 由LeetCode排序引起的排序算法总结
- 由Java引起的指令重排序思考
- leetcode总结-- 排序算法(内部排序)
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 由排序算法引出的数据结构
- 归并排序及排序算法的总结
- 由希尔排序算法实现引起的for循环执行过程及i++和++i异同的提问——打打基础
- 【排序算法】排序算法总结
- 由ssh框架引起的set里的对象排序问题
- 一些排序算法的总结
- 排序算法的分类总结
- 简单排序算法的总结
- TP框架准备工作
- Oracle 11g数据库详细安装步骤图解
- denny的学习专栏——徐其华——tensorflow
- Android--控件Button的详细用法介绍(适合初学者)
- 考试篇(5.2) NSE4 题库 01. 入门 ❀ 飞塔 (Fortinet) 网络安全专家
- 由LeetCode排序引起的排序算法总结
- 完全免费快速搭建个人www服务器
- Oracle 安装
- LeetCode部分题解
- Fedora25安装fiddler
- 51 nod 1241 特殊的排序(思维)@
- 【面向对象】三大特性——封装、继承、多态
- 全排列 【dfs回溯】+【set去重】
- 企业QQ空间xss随意得客户端QQ号码 附(爆破盗号者后台)