前提:0-100內的隨機數N個,實現從小到大(從大到小)排序。php
實現:新建一個長度爲101的數組,value初始化爲0。數組每一個key表明0-100中的數字,value值表示0-100中任意一個數組的出現次數。數組
通俗點說就是每一個key表明一個桶,咱們有101個桶,每一個桶上表上數字0-100。把要排序的數字扔到對應的桶裏,桶裏扔一個數字時相應的key的value值就+1,表示桶裏有幾個數字。spa
代碼實現:code
$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); //須要排序的數字 <pre name="code" class="php"><pre name="code" class="php">$sortnumbers = <span style="font-family: Arial, Helvetica, sans-serif;">barrel_sort($numbers, 101);</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="php">print_r($sortnumbers);