首页 > 代码库 > 常用排序算法

常用排序算法

为方便自己看懂,所以用的语言比较通俗。

排序算法稳定性解释:如果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相反,按照最高位数排列,位数不足的相当于补零,分成若干个堆后,在这每个堆里再进行递归排序,直到每个堆都从小到大排好。其他就不详细解释了。

    



常用排序算法