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";
}
?>