歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

最簡單快速的排序法之桶排法

前提: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);

Copyright © Linux教程網 All Rights Reserved