今天重新看了看木桶排序,思路比较简单,这里整理一下,免得下次忘记。
假设要对一组数据 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);