计数排序并不是一种基于比较的排序算法,其核心是将输入的数据值转换成一个key,存储在附加的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入数据必须是一定范围内的整数。算法描述找到待排序数组中最大和最小的元素;统计数组中每个值为i的元素出现的次数,存入数组C的第i项;累加所有计数(从C元素中的第一个开始,将每一项添加到前一项);反向填充目标数组:将每个元素i放入新数组的第C(i)项中,每放一个元素就减去C(i)。1./***计数排序:桶排序的一种*/$arr=[5,69,4,32,14,8,74,95,23,56,41,5,31,63];$length=count($arr);$maxValue=$arr[0];//寻找数组中的最大值for($i=1;$i<$length;$i++){if($arr[$i]>$maxValue){$maxValue=$arr[$i];}}/***定长数组,key会自动排序,PHP数组是hashtable的实现,*这里如果使用普通数组,key不会自动排序,不存在的key不会自动排序filledwithnull*/$frequency=newSplFixedArray($maxValue+1);/***统计arr中值出现的频率*/for($i=0;$i<$length;$i++){if(空($频率[$arr[$i]]))$频率[$arr[$i]]=0;$frequency[$arr[$i]]+=1;}//清除$arr$arr=[];//遍历频率,如果它的元素有值,则pushkey到arrfor($i=0;$i
