• PHP算法之快速排序


    快速排序: 效率比较高, 使用空间换时间(递归)

    原理: 从一个数组中,随机取出一个元素: 以该元素为基准,将数组中剩余的其他元素挨个的与当前元素进行比较: 比元素小的存放到一个数组, 比元素大的也存放到一个数组. 当所有的元素都比较完之后: 一定会确定中间元素(取出的元素)的位置.

    两边的数组依然需要排序: 利用上述解决问题的方式解决子问题(递归点),直到数组元素个数为1, 再返回(递归出口), 返回的结果与上述的结果进行合并.

    代码实现

    /**
     * 快速排序
     * @param array $arr 待排序的数组
     * @return array 已经排序好的数组
     */
    function quick_sort($arr) {
        // 求出数组长度
        $len = count($arr);
    
        // 递归出口判断
        if ($len <= 1) return $arr;
    
        // 取出第一个元素
        $middle = $arr[0];
    
        // 剩余元素与第一个元素进行比较
        $left = $right = array();
        for ($i = 1;$i < $len;$i++) {
            // 比较:小的放左边,大的放右边
            if($arr[$i] < $middle){
                $left[] = $arr[$i];
            }else{
                $right[] = $arr[$i];
            }
        }
    
        // $left和$right都是未排序的数组
        $left = empty($left) ? $left : quick_sort($left); // 等待:left排好序
        $right = empty($right) ? $right : quick_sort($right);
    
        // 合并数组: 返回
        return array_merge($left,array($middle),$right);
    }
    
    // 定义要排序的数组
    $arr = array(3,1,6,9,2,1);
    
    // 调用函数
    print_r(quick_sort($arr)); // Array ( [0] => 1 [1] => 1 [2] => 2 [3] => 3 [4] => 6 [5] => 9 )
  • 相关阅读:
    idea连接数据库和版本控制(Version Control)
    Idea新手入门-部署tomcat
    Redis 列表(List)
    Redis 集合(Set)
    Redis中的哈希(Hash)
    Redis初步整理
    C#中的集合之ArryList
    linux中pip安装步骤与使用详解
    搭建 LAMP 环境
    搭建WordPress 个人博客
  • 原文地址:https://www.cnblogs.com/chenjiacheng/p/6522305.html
Copyright © 2020-2023  润新知