排序算法的详解与总结
来源:互联网 发布:媒体监测数据 编辑:程序博客网 时间:2024/06/05 19:20
在开始介绍排序方法之前,需要先掌握排序的三个因素,这些因素是决定我们选择哪种排序方法的关键。
1) 时间复杂度,这个是程序员最关心的问题,大家都想最快速度算出结果才好。
2) 稳定性,当序列中两个相等的元素排序结束后前后顺序是否发生变动,这个是业务人员最关心的问题,程序员们没特殊要求基本不care。不过稳定性在业务上确实存在一定的意义,例如我们拿到一个班级按姓氏笔画排名的成绩单,现在要求我们按照考试分数进行排序,虽然张三和王二同分,在姓氏笔画名单中王二在前面,排序结束后王二还是要求在前面。
3)空间复杂度,在运算过程中直接占用空间存储的大小。说实话这里把它放在最后一位也代表了我个人对它的态度,我们可以认为在当前微服务横行、内存技术的发展的前提下,空间复杂度远远比时间复杂度的重要性低得多。而且要看你对空间复杂度是怎么理解的,我也可以把(内存乘以时间)当作空间复杂度,“时间很短内存占用很大的算法”和“时间很长内存占用很小的算法”对于整个系统来说内存消耗其实是一样的,那么我更愿意选前者。
八类排序算法的详解和案例:
直接插入排序
希尔插入排序
简单选择排序和二元选择排序
冒泡排序
快速排序详解与实现
归并排序
堆排序
基数排序
复杂度和稳定性汇总:
排序方法
时间复杂度
空间复杂度
稳定性
直接插入
O(n^2)
O(1)
稳定
希尔
O(n^1.3)
O(1)
不稳定
简单选择
O(n^2)
O(1)
不稳定
冒泡
O(n^2)
O(1)
稳定
快排
O(nlogn)
O(nlogn)
不稳定
归并
O(nlogn)
O(n)
稳定
堆排
O(nlogn)
O(1)
不稳定
基数
O(d(r+n))
O(r+n)
稳定
总结下:
1 凡是不需要创建临时控件,通过指针变动位置互换就可以完成的排序,空间复杂度最低,只有O(1)
2 凡是按照固定的套路元素两两比较直到结束的,时间复杂度最高,是O(n^2),像冒泡排序、简单选择排序就属于这种排序。
3 选择排序方法第一优先是业务,也就是稳定性;第二优时间复杂度不能太差,剩下的取时间和空间的平衡。
- 排序算法的详解与总结
- 常见排序算法的总结与比较
- 七大排序算法的研究与总结
- 各种排序算法的总结与比较
- 算法--排序算法的介绍与总结(一)
- 算法--排序算法的介绍与总结(二)
- 算法--排序算法的介绍与总结(三)
- 算法--排序算法的介绍与总结(四)
- 算法--排序算法的介绍与总结(五)
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法的总结
- 排序算法总结与思考
- 排序算法理论与总结
- Java自带线程池和队列详细讲解
- 算法工程师
- Spring管理的事务:如何配置回滚及try catch情况下的回滚
- Ubuntu16.04 安装openjdk-7-jdk
- 3Sum--LeetCode
- 排序算法的详解与总结
- 机器学习基本概念、机器学习的五大流派和演化、九种常见机器学习和深度学习算法
- 源码阅读--BroadcastReceiver广播机制
- [ElasticSearch]Java API 之 滚动搜索(Scroll API)
- 十三种常用的数据挖掘的技术
- 文件服务器之NFS服务器
- c#中获取服务器IP,客户端IP以及Request.ServerVariables详细说明
- 读《用户体验要素》有感
- Spring Cloud# Spring Cloud Stream UnitTest设计模式