• php排序算法


    (一)冒泡排序

    /**
     * 冒泡排序:
     * 使用相邻的元素挨个比较一次 符合条件交换位置
     * @param $arr
     */
    function bubbleSort($arr)
    {
        $length = count($arr);
    
        for ($i = 0; $i < $length - 1; $i++) { //控制轮数 length个数只需要比较length-1轮
            //控制每一轮的比较:并选出一个最大数
            //索引值应该是从0开始 --->到每一轮的倒数第二个结束 与其对应的后面一个元素进行比较
            //每一轮选出一个最大值以后 下一轮就少掉一个值 :
            //第一轮i=0,少0个;  j<arr.length-1-0
            //第二轮i=1,少1个;  j<arr.length-1-1
            //第三轮i=2,少2个   j<arr.length-1-2
            for ($j = 0; $j < $length - 1 - $i; $j++) {
                if ($arr[$j] > $arr[$j + 1]) {
                    $temp        = $arr[$j];
                    $arr[$j]     = $arr[$j + 1];
                    $arr[$j + 1] = $temp;
                }
            }
        }
        return $arr;
    }

    (二)选择排序

    /*
    选择排序)
    使用一个元素与其他元素挨个比较一次 如果符合条件则交换位置
    */
    function selectSort($arr)
    {
        $length = count($arr);
        //使用每个元素与其后面的所有元素挨个比较一次 符合条件则交换位置
        for ($i = 0; $i < $length - 1; $i++) {//被比较的数 从第一个到倒数第二个
            for ($j = $i + 1; $j < $length; $j++) {//要比较的其他所有数 从被比较的数后面一个开始 一直到最后一个数
                if ($arr[$i] > $arr[$j]) {
                    $temp    = $arr[$i];
                    $arr[$i] = $arr[$j];
                    $arr[$j] = $temp;
                }
            }
        }
        return $arr;
    }

     (三)快速排序

    /**
     * 快速排序
     * 通过设置一个初始中间值,来将需要排序的数组分成3部分,小于中间值的左边,中间值,大于中间值的右边,
     * 继续递归用相同的方式来排序左边和右边,最后合并数组
     * @param $arr
     * @return array
     */
    function quickSort($arr)
    {
        // 如果个数为空或者1,则原样返回数组
        if (count($arr) <= 1) {
            return $arr;
        }
    
        $middle = $arr[0]; // 初始中间值
    
        $left  = array(); // 接收小于中间值
        $right = array();// 接收大于中间值
    
        // 循环比较
        for ($i = 1; $i < count($arr); $i++) {
    
            if ($arr[$i] > $middle) {
    
                // 大于中间值
                $right[] = $arr[$i];
            } else {
    
                // 小于或等于中间值
                $left[] = $arr[$i];
            }
        }
    
        // 递归排序划分好的2边
        $left  = quickSort($left);
        $right = quickSort($right);
    
        // 合并排序后的数据,别忘了合并中间值
        return array_merge($left, array($middle), $right);
    }
  • 相关阅读:
    MySQL-子查询,派生表,通用表达式
    MySQL-插入数据(INSERT)
    IDEA中如何使用debug调试项目 一步一步详细教程
    Java相对路径/绝对路径总结
    jsp九个内置对象、四个域对象及Servlet的三大域对象
    浅析MVC模式与三层架构的区别
    三层架构详解
    Java集合中List,Set以及Map等集合体系详解
    POJ3233 [C
    HDU 2829 [Lawrence] DP斜率优化
  • 原文地址:https://www.cnblogs.com/jxl1996/p/10138888.html
Copyright © 2020-2023  润新知