php實現計數排序

php實現計數排序

這個是參考百度百科的C語言版本,算法思想很簡單,就是在相等的數處理的時候有問題,不過後來也想通了,也加上了註釋。

<?php

    $arr=array(1,2,3,5,2,3,9,8,3,2,7,4,9,8,0,4,587,93,47,59,8,2,6,83,4,9,65,2,18,7);
    printArr($arr);
    echo "<hr>";
    function counting_sort(&$arr){
        $arr_=array();
        $cnt=0;
        $len=count($arr);
        for($i=0;$i<$len;$i++){//從第一個開始找比它小的數有多少個
            $cnt=0;
            for($j=0;$j<$len;$j++)
                if($arr[$i]>$arr[$j])
                    $cnt++;        //計數比他小的有多少個
            while($arr_[$cnt]!=0 && $cnt<$len)
                $cnt++;            //對於相等的數,那麼$arr_一定不爲0,則cnt向前走一位進行存儲
            $arr_[$cnt]=$arr[$i];
        }
        for($i=0;$i<$len;$i++)
            $arr[$i]=$arr_[$i];
    }
    counting_sort($arr);
    printArr($arr);
    function printArr($arr){
        for($i=0;$i<count($arr);$i++)
            echo ' '.$arr[$i];
        echo "\n";
    }
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章