计数排序只适用于整数在小范围内排序
- $arr = [95,94,91,98,99,90,99,93,91,92];
- function countSort($arr){
- $max = $arr[0];
- $min = $arr[0];
- for($i=0;$i<count($arr);$i++){
- if($arr[$i]>$max){
- $max = $arr[$i];
- }
- if($arr[$i] <$min){
- $min = $arr[$i];
- }
- }
- try{
- $frequency = new SplFixedArray($max-$min+1);
- for($i=0;$i<count($arr);$i++){
- if(empty($frequency[$arr[$i]-$min]))
- $frequency[$arr[$i]-$min] = 0;
- $frequency[$arr[$i]-$min] += 1;
- }
- $sum = 0;
- for ($i=0; $i < count($frequency); $i++) {
- $sum += $frequency[$i];
- $frequency[$i] = $sum;
- }
- $splfixed = new SplFixedArray(count($arr));
- for($i=(count($arr)-1);$i>=0;$i--){
- $splfixed[$frequency[$arr[$i]-$min]-1] = $arr[$i];
- $frequency[$arr[$i]-$min] -= 1;
- }
- }catch(RuntimeException $re){
- echo "RuntimeException:".$re->getMessage()."\n";
- }
- print_r($splfixed->toArray());
- }
- countSort($arr);
来源: http://www.bubuko.com/infodetail-2801098.html