桶排序

研究一位大神写,有一点没有明白,然后就去其他地方觅食,明白了其中的原理,根据原理整理写下:

/**
 * @param array $arr 待排序的数组
 * @return array $sort_result_arr 排序后的数组
 */
function bucketSorting(array $arr):array
{
    //待排序数组中的最小值与最大值
    $min=min($arr);
    $max=max($arr);

    //生成最小key为$min,最大key为$max-$min+1数组,且每个key对应的value值都为0
    //$bucket数组就相当于一个大桶,每个key对应一个型号桶,value值对应此型号桶的数量
    $bucket = array_fill($min, $max-$min+1, 0);

    //将$arr的值放入对应的型号桶中。(将$arr中的value对应$bucket的key)
    foreach($arr as $value){
        //计算对应型号桶的数量
        $bucket[$value]++;
    }

    //因为上面的步骤已经将$arr中的value值放在对应$bucket的key,按照大小排好了。所以下面只要按照类型桶的个数显示几个
    $sort_result_arr = array();
    foreach ($bucket as $k=>$v){
        //按照类型桶的个数显示几个
        for($i=1;$i<=$v;$i++){
            $sort_result_arr[]=$k;
        }
    }
    return $sort_result_arr;
}

$arr = array(3,1,33,45,6,3,5,3,5);
$sort_result_arr = bucketSorting($arr);
var_dump($sort_result_arr);
本作品采用《CC 协议》,转载必须注明作者和本文链接
The sun is always behind the storm~
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!