谭兄

导航

 

今天重新看了看木桶排序,思路比较简单,这里整理一下,免得下次忘记。

假设要对一组数据 2 2 3 1 6 5 4  进行桶排序。

1.首先选出最小元素1和最大元素6,做一个桶,也就是定义一个1-6的数组,并且把他们的值都置为0。

 

2.遍历这个桶,每一步遍历桶都在该数组中查找是否有元素和这个桶的下标相等,如果有,则该桶中该下标对应的元素值自增1;

 

3.遍历桶,根据数组中元素在桶中出现的次数就可以排好序了,用一个数组保存结果并返回。

 

代码如下:

 1 <?php
 2 
 3 $list = array(2,2,3,1,6,5,4);
 4 
 5 function backetSort($list){
 6     $min = min($list);
 7     $max = max($list);
 8     //做桶,最小值到最大值全部用0填充
 9     $arr = array_fill($min,$max-$min+1,0);
10     //入桶
11     foreach($list as $k=>$v){
12         $arr[$v]++;
13     }
14 
15     foreach($arr as $k=>$v){
16         for($i=1;$i<=$v;$i++){
17             $result[] = $k;
18         }
19     }
20     return $result;
21 }
22 
23 $list = backetSort($list);
24 
25 var_dump($list);

 

posted on 2015-11-28 21:18  谭兄  阅读(397)  评论(0编辑  收藏  举报