php实现基数排序
在百度上查了一下资料,然后又听了一下关于这个的课,感觉不算是原创的吧,因为好多代码的思想都是看别人的。
整个代码写了一个多小时,php果然是一个很强大的语言啊,以前都是用c写这类东西,现在突然转到php了,感觉突然还有些不习惯。家里没有暖气,手都快冻僵了,好了,粘代码,暖手。
<?php
for($i=0;$i<500;$i++)
$arr[$i]=rand(0,10000);
printArr($arr);
echo "<hr>";
function base_sort(&$arr){
$len=count($arr);
$max=0;
$cnt=0;
$arr_=array();
for($i=0;$i<$len;$i++) //获取数组中的最大值
if($arr[$i]>$max)
$max=$arr[$i];
while($max/10!=0){ //获取最大值一共有多少位,以便于以后决定进行多少次入桶和出桶
$max=(int)$max/10;
$cnt++;
}
$cnt--;
for($i=0;$i<$cnt;$i++){
$temp=pow(10,$i);
for($j=0;$j<$len;$j++){ //将每一个元素进行入桶
$a=$arr[$j]/$temp%10;
$arr_[$a][]=$arr[$j];
}
for($arr_index=0,$k=0;$k<10;$k++){ //将每一个元素进行出桶,并将他们进行合并
for($j=0;$j<count($arr_[$k]);$j++){
if(!empty($arr_[$k])){
$arr[$arr_index++]=$arr_[$k][$j];
}
}
}
unset($arr_);
}
}
base_sort($arr);
printArr($arr);
function printArr($arr){
for($i=0;$i<count($arr);$i++)
echo ' '.$arr[$i];
echo "\n";
}
?>