PHP常见排序算法12——基数排序
Posted 码农小光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP常见排序算法12——基数排序相关的知识,希望对你有一定的参考价值。
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。
基数排序有两种实现方法,最低位优先LSD和最高位优先MSD。LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。本文采用LSD方式来实现。马上到!方式大家可自行实现。
算法描述
遍历待排序列,取出其中最大值
获取最大值的位数
将待排序列按照最低位进行排序,因为每位的数值个数有限,可使用桶排序或者计数排序
对上一步排完序后的序列再按照次低位进行排序,排序过程中要保证稳定性
以此类推,直到最高位排序完成,高位不足的以0填充
算法实现
php代码
function RadixSort(&$arr) {
$len = count($arr);
if($len<=1)
return;
//找出数组中最大值
$maxValue = max($arr);
//计算出最大值的位数
$maxDigit = strlen($maxValue);
$mod=10;
$dev=1;
for($i=1; $i<=$maxDigit; $i++, $dev*=10) {
$bucketArr = array(); //对每位运用桶排序
for($j=0; $j<$len; $j++) {
$index = floor($arr[$j]/$dev)%$mod;
$bucketArr[$index] []= $arr[$j];
}
$pos=0;
for($j=0; $j<10; $j++) {
if(is_array($bucketArr[$j])) {
foreach($bucketArr[$j] as $v)
$arr[$pos++] = $v;
}
}
}
}
算法复杂度分析
时间复杂度:O (n+k)
空间复杂度:O (n)
稳定性:基数排序是稳定的
以上是关于PHP常见排序算法12——基数排序的主要内容,如果未能解决你的问题,请参考以下文章