zoukankan      html  css  js  c++  java
  • PHP排序算法之快速排序

    原理:找到当前数组中的任意一个元素(一般选择第一个元素),作为标准,新建两个空数组left、rignt,遍历整个数组元素,如果遍历到的元素比当前的元素小就放到数组left,比当前的元素大放到rignt,然后再对新数组进行同样的操作。

    递归:
    递归是一种函数调用自身的机制。
    递归必须要有边界条件,也就是递归出口(退出递归)
    递归前进段和递归返回段,也就是最后得到的值
    当边界条件不满足时,递归前进;当边界条件(递归出口)满足是,递归返回。
    PHP的递归非常消耗性能,尽量避免使用。

    快速排序的原理复合递归原理
    递归点:如果数组元素大于1,就需要再进行分解,所以我们的递归点就是新构造的数组元素个数大于1
    递归出口:当数组元素个数为1,不需再对新数组进行排序。

    实现代码:

    $arr = [34,56,7,89,12,9];
    function quick_sort($arr)
    {

    
    // 判断参数是否是一个数组
    if(!is_array($arr)) return false;
    // 递归出口:数组长度为1,直接返回数组
    $length = count($arr);
    if($length <= 1) return $arr;
    // 数组元素有多个,则定义两个数组
    $left = $right = [];
    // 循环遍历数组,把第一个元素当做比较的对象
    for($i=1;$i<$length;$i++)
    {
        //判断当前元素的大小
        if($arr[$i] < $arr[0])
        {
            $left[] = $arr[$i];
        }
        else
        {
            $right[] = $arr[$i];
        }
    }
    // 递归调用
    $left = quick_sort($left);
    $right = quick_sort($right);
    // 将所有的结果合并
    return array_merge($left,[$arr[0]],$right);
    

    }
    print_r(quick_sort($arr));

    原文地址:https://segmentfault.com/a/1190000016001628

  • 相关阅读:
    494 Target Sum 目标和
    493 Reverse Pairs 翻转对
    492 Construct the Rectangle 构建矩形
    491 Increasing Subsequences 递增子序列
    488 Zuma Game 祖玛游戏
    486 Predict the Winner 预测赢家
    485 Max Consecutive Ones 最大连续1的个数
    483 Smallest Good Base
    Django Form组件
    Django Auth组件
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9975020.html
Copyright © 2011-2022 走看看