设为首页 加入收藏

TOP

最简单快速的排序法之桶排法
2014-11-23 22:15:43 来源: 作者: 【 】 浏览:11
Tags:简单 快速 排序

前提:0-100内的随机数N个,实现从小到大(从大到小)排序。

实现:新建一个长度为101的数组,value初始化为0。数组每个key代表0-100中的数字,value值表示0-100中任意一个数组的出现次数。

通俗点说就是每个key代表一个桶,我们有101个桶,每个桶上表上数字0-100。把要排序的数字扔到对应的桶里,桶里扔一个数字时相应的key的value值就+1,表示桶里有几个数字。

代码实现:


$numbers = array(63,6,98,54,88,5,89,16,59,10,31,28,1,61,59,66,91,19,10,38,22,63,16); //需要排序的数字
$tmparr = array_fill(0, 101, 0); //生成键值是0-100值是0的数组
$sortarr = array(); //排序后的数组
for($count=count($numbers), $i=0; $i<$count; $i++){
$tmparr[$numbers[$i]] += 1;
}
for($count=count($tmparr), $j=0; $j<$count; $j++){
for($k=0; $k<$tmparr[$j]; $k++){
$sortarr[] = $j;
}
}
print_r($sortarr);


方法封装:


/**
* 排序之桶排法
* @param array $numbers 需要排序的数字组
* @param int $arrlen 临时数组的长度,可以理解为要排序的数组中最大的数字
* @return array $sortnumbers 排序后的数组
**/
function barrel_sort($numbers, $arrlen){
$sortnumbers = array();
if(!empty($numbers) && is_array($numbers) && $arrlen > 0){
$tmparr = array_fill(0, $arrlen, 0); //生成键值是0-100值是0的数组
for($count=count($numbers), $i=0; $i<$count; $i++){
$tmparr[$numbers[$i]] += 1;
}
for($count=count($tmparr), $j=0; $j<$count; $j++){
for($k=0; $k<$tmparr[$j]; $k++){
$sortnumbers[] = $j;
}
}
}
return $sortnumbers;
}


$numbers = array(63,6,98,54,88,5,89,16,59,10,31,28,1,61,59,66,91,19,10,38,22,63,16); //需要排序的数字
$sortnumbers = barrel_sort($numbers, 101);


print_r($sortnumbers);


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android:一个Open键引发的问题!! 下一篇Matlab基础应用之作图

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: