基数排序是非比较的排序算法,对每一位进行排序,从最低位开始排序,直至最后一位。
思路:
1、获得数组中最大数,开取得其位数;
2、从最低位开始取每个位组成新数组;
3、对新数组进行计数排序(利用计数排序适用于小范围数的特点)。
<?php
function radix_sort($arr)
{
//定义排序桶
$sort = array_fill(0,9,array());
$len = strlen(max($arr));
echo $num;
for($i=0;$i<$len;$i++){
$exp = pow(10,$i);
//入桶
foreach($arr as $key=>$val){
$num = ($val/$exp)%10; //取对应位数上的数
$sort[$num][] = $val;
}
$arr = array();
//出桶
foreach($sort as $key=>$val){
$arr = array_merge($arr,$val);
$sort[$key] = array();
}
}
return $arr;
}
$arr = array(12, 35, 14, 27, 48, 31, 24, 29, 86, 34, 91);
print_r(radix_sort($arr));
?>