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

來源:互聯網
上載者:User

標籤:排序演算法   桶排法   

前提: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); //需要排序的數字<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);




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.