十大排序之桶排序

本文深入解析桶排序算法,介绍其工作原理:通过将一定范围的数值分配到特定的桶中,再对每个桶内的元素使用插入排序进行排序,最后合并所有桶的元素得到最终排序结果。文章提供了一个PHP实现的例子,展示了桶排序的具体操作流程。

相比较计数排序,桶排序是将某个区间的数分配在一个桶中,而不是一个数一个桶

然后对桶内的元素进行排序(此处我采用插入排序)

最后输出就行

<?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]));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值