标签:style ar sp c log 时间 line r 算法
为方便自己看懂,所以用的语言比较通俗。
排序算法稳定性解释:如果a=b,a原来在b前面,排序算法后a也在b前面,就是稳定排序。
归并排序:稳定排序,时间复杂度为O(NlogN),将若干有序的数组合并成一个有序的数组,维基百科php语言实现的思想如下:
如两个数组$a=array(5,8,9,6,1),$b=array(6,4,2,7),先分别sort排序后(1,5,6,8,9),(2,4,6,7),然后开始取两个数的第一个数比较,如1和2,1<=2,所以用数组$c=array_shift($a[0]),即删除a第一个元素并赋给c,依次继续下去,直到其中一个数组为空。最后合并三个数组array_merge($c,$a,$b),具体语言差不多了,就不写了。
基数排序:稳定算法,时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,包括两种类型,由高位数开始分堆 和从低位数开始分堆,思想如下:
低位数(LSD): 如一串数字,84,54,45,14,83,91,23,首先按个位数字从小到大的分堆,如91和83,23和84,54,14和45,然后重新排列, 91,83,23,84,54,14,45,然后按照十位数从小到大分堆,14和23和45和54和83,84和91,然后就排列好了,14,23,45,54,83,84,91,位数多的时候依次类推。
高位数(MSD):和LSD相反,按照最高位数排列,位数不足的相当于补零,分成若干个堆后,在这每个堆里再进行递归排序,直到每个堆都从小到大排好。其他就不详细解释了。
标签:style ar sp c log 时间 line r 算法
原文地址:http://my.oschina.net/604388847/blog/318557