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";
    }
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值