概述:排序算法可分为比较性的排序,以及运算性的排序;这里详细介绍这些排序的原理,性能,实现,以及应用场合。
前面是维基百科的介绍,这里介绍几个比较典型的算法。
理论
交换排序
选择排序
插入排序
归并排序
分布排序
并发排序
混合排序
其他
以下介绍典型的算法:::::----》》》》
比较排序
一:快速排序(交换排序2号)
1:原理
采用了分治思想,在序列A[p...r]中选取一个元素,当然这里是用了p或者r处的元素(规格一致);找到该元素的,满足前面的值都比它小,后面的都比它大;同理让子序列递归下去。
2:性能
中间状态:比如划分比例是a:b;则复杂度就是a/(b+a);b/(b+a)取大的(假设为a/(b+a)),则复杂度为θ(nlog(b+a)/a(n))其实也可以是θ(nlog(n))
平均复杂度也就是θ(nlog(n));
空间复杂度为:O(logn)----递归引起;
3:应用
4:实现----c++代码实现如下
第二:插入排序
4:实现
第三:归并排序
4:实现
第四:堆排序
1:原理
2:性能
3:应用
4:实现
第五:选择排序
1:原理
通过比较,先找出最大值或者最小值,找到后就将其放到队首,这样下来就是顺序的了。
2:性能
空间复杂度:1
3:应用
n小时比较合适,算法简单,是比较后排序;使用场合少
4:c++实现
第六:冒泡排序(交换排序1号)
1:原理
通过比较,不断冒充最大值或者最小值,它和选择排序相似,选择排序是先找最小值,再交换;而冒泡是比较一次就会交换,从效率上将,冒泡排序不如选择排序。
2:性能
3:应用
应用类似插入算法
4:实现
1)往前冒泡
2)往后冒泡(C#)
第七:希尔排序
1:原理
通过分组排序,比如以某个增量d,也就是分成d组,在d组内中进行插入排序;不断让d减小,使的最后为1,也就是到达了直接排序效果;和插入比较有何体现呢?插入最坏是O(n²),最好是O(n)。但是在n小时相差不大,这就是用分组减小n,而后期的组数少了,但是排序好了,则会走向好的情况,故而总体是效率高了。
2:性能
注:n较大时目前一般是n1.25到1.6n1.25之间。
3:应用
它优于插入算法,不稳定。
4:实现
第八:鸡尾酒排序
1:原理
在冒泡基础上改进,让单向冒泡变成双向冒泡;结束时是两个冒泡起点重合时。
2:性能
最坏情况还是和冒泡一致;n的2次方
但是好的和插入相似了。为n;它比直接冒泡要好;
空间复杂度:1
3:应用
性能和直接插入算法相似,故而和插入算法应用相似。
4:实现
第九:地精排序
1:原理
在冒泡基础上改进的,它的效果和插入排序相似,号称是简单的排序算法,算法实现非常短。
2:性能
性能和插入排序一样
3:应用
应用和插入排序一样
4:实现
第十:奇偶排序
1:原理
选取奇数,和它相邻比较,排序;同样对偶数也这样,最后达到没有交换了,此时就是顺序的了