php 经典算法

Posted IronMenPHP

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 经典算法相关的知识,希望对你有一定的参考价值。


    /**
     * 冒泡排序
     * 冒泡排序意思就是比较两个相邻的两个数字,然后进行从大到小或者从小到大的排序
     * @param $arr 要处理的数组数据
     */
    $arr = array(6, 9, 7, 11, 2, 1, 3, 8, 5, 10, 4, 12);
    public function bubbling($arr)
    {
        //判断传来的数组数据  是否正确
        if (!is_array($arr) || empty($arr)) {
            return $arr;
        }
        $len = count($arr);
        //循环需要冒泡的轮数
        for ($i = 1; $i < $len; $i++) {
            //控制次数 判断大小交换位置
            for ($j = 0; $j < $len - $i; $j++) {
                //判断当前值大于后面的值
                if ($arr[$j] > $arr[$j + 1]) {
                    //位置交换
                    //将大的数存在一个变量里
                    $tmp = $arr[$j + 1];
                    //后面的小值替换大值  小值往前挪
                    $arr[$j + 1] = $arr[$j];
                    //大值替换小值
                    $arr[$j] = $tmp;
                }
            }
        }
        var_dump($arr);
    }

   /**
     * 选择排序
     * 选择排序就是 找到数组最小的的数值放到开始  依次排序
     */
    public function opt()
    {
        $arr = array(6, 9, 7, 11, 2, 1, 3, 8, 5, 10, 4, 12);
        $len = count($arr);
        //$i 当前最小的位置 需要参与比较的元素 放在第一个位置
        for ($i = 0; $i < $len - 1; $i++) {
            //假设最小值的位置
            $p = $i;
            //$j 当前都需要和哪些元素比较 $i后边的
            for ($j = $i + 1; $j < $len; $j++) {
                //一直$p是最小的值
                //$j<$p 则是 $j 最小
                if ($arr[$p] > $arr[$j]) {
                    $p = $j;
                }
            }
            //已经确定当前的最小值放到了$p中
            //如果发现最小值的位置与 当前假设的位置$i 不同,则互换位置
            if ($p != $i) {
                //设定一个变量 存放最小的数据
                $tmp = $arr[$p];
                $arr[$p] = $arr[$i];
                $arr[$i] = $tmp;
            }
        }
        var_dump($arr);
    }

    /**
     * 插入排序法
     *将要排序的元素插入到已经假定排序好的数组指定的位置
     * @param $arr
     * @return mixed
     */
    public function insert_sort($arr)
    {
        //区分哪部分是已经排序好的
        //哪部分是没有排序的
        //找到其中一个需要排序的元素
        //这个元素就是从第二个元素开始,到最后一个元素都是这个需要排序的元素
        //利用循环就可以标志出来
        //i循环控制,每次需要插入的元素,一旦需要插入的元素控制好了,
        //间接已经将数组分成了2部分,下标小于当前的(左边的),是排序好的序列
        for($i = 1,$len = count($arr);$i < $len;$i++){
            //获得当前需要比较的元素值
            $tmp = $arr[$i];
            //内层循环控制比较并插入
            for($j = $i-1;$j >= 0;$j--){
                //$arr[$j],需要插入的元素,$arr[$j],需要比较的元素
                if($tmp < $arr[$j]){
                    //发现插入的元素要小,互换位置
                    //将后边的元素与前面的元素交换
                    $arr[$j+1] = $arr[$j];
                    //将前面的数设置为当前需要交换的数
                    $arr[$j] = $tmp;
                }else{
                    //如果碰到不需要移动的元素
                    //由于是已经排序好的数组,则前面的就不需要再次比较了
                    break;
                }
            }
        }
    //将这个元素插入到已经排序好的序列内
    //返回
        return $arr;
    }

转载 :  https://blog.csdn.net/Aaroun/article/details/79131987

以上是关于php 经典算法的主要内容,如果未能解决你的问题,请参考以下文章

2个比较经典的PHP加密解密函数分享

一致性哈希算法PHP测试片段

php经典算法

PHP四大经典排序算法源码

php经典算法

经典排序算法(PHP)