相比较计数排序,桶排序是将某个区间的数分配在一个桶中,而不是一个数一个桶
然后对桶内的元素进行排序(此处我采用插入排序)
最后输出就行
<?php
function bucketSort($a){
$len = count($a);
$ans = array();
for($i = 0; $i < $len; $i++) {
$b = intval($a[$i] / 10);
if(!isset($ans[$b])) {
$ans[$b] = array();
}
array_push($ans[$b], $a[$i]); // 插入到某个桶中
$k = count($ans[$b]) - 1;
while($k-1 >= 0 && $a[$i] < $ans[$b][$k-1]) { // 插入排序
$ans[$b][$k] = $ans[$b][$k-1];
$k--;
}
if($k == 0) {
$ans[$b][$k] = $a[$i];
}
}
$res = ksort($ans);
$res = [];
array_walk_recursive($ans, function($value) use (&$res) { // 转换为一维数组
array_push($res, $value);
});
return $res;
}
print_r(bucketSort([9,5,49,26,35,16,65,48,47,31,64,65,67,63,68]));
本文深入解析桶排序算法,介绍其工作原理:通过将一定范围的数值分配到特定的桶中,再对每个桶内的元素使用插入排序进行排序,最后合并所有桶的元素得到最终排序结果。文章提供了一个PHP实现的例子,展示了桶排序的具体操作流程。
4万+

被折叠的 条评论
为什么被折叠?



