您的位置:首页 > 其它

排序算法的详解与总结

2017-12-11 18:08 183 查看
在开始介绍排序方法之前,需要先掌握排序的三个因素,这些因素是决定我们选择哪种排序方法的关键。
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        选择排序方法第一优先是业务,也就是稳定性;第二优时间复杂度不能太差,剩下的取时间和空间的平衡。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序算法