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

  • 相关阅读:
    ios中文件夹文件的创建和删除
    iOS沙盒文件目录介绍
    ios中多线程GCD NSOperation NSThread 相关的操作解析
    iOS中如何使定时器NSTimer不受UIScrollView滑动所影响
    iOS如何实现语音播报及后台播放
    iOS中字符串转float类型失真的解决办法
    iOS图文混排的几种方式
    iOS程序内实现版本更新
    iOS中跑马灯效果小结
    AppDelegate
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9975020.html
Copyright © 2011-2022 走看看