• 快速排序


    1、原理:

    找到当前数组中的任意一个元素(一般选择第一个元素),作为标准,新建两个空数组,遍历整个数组元素,

    如果遍历到的元素比当前的元素要小,那么就放到左边的数组,否则放到右面的数组,然后再对新数组进行同样的操作

    2、递归:

    程序调用自身的编程技巧称为递归。

    1. 递归必须要有边界条件,也就是递归出口(退出递归)
    2. 递归前进段和递归返回段,也就是最后得到的值
    3. 当边界条件不满足时,递归前进;当边界条件(递归出口)满足时,递归返回

    例子:

    递归计算阶乘:

    <?php
        funtion digui($n){
            if($n==1){
                return 1;
            }
            return digui($n-1)*$n;
        }
    
        $a=6;
        echo "{$a}的阶乘为:{$a}!=".digui($a);

    //输出
    6的阶乘为:6!=720;

      

    递推:

    用若干步可重复运算来描述复杂问题的方法

    通常是通过计算前面的一些项来得出序列中的指定项的值

    例子:

    求斐波那契数列的第n项的值

    斐波那契数列的规律:1, 1, 2, 3, 5, 8, 13, 21…(最前的两个数都为1,从第3位开始,后面每位数为前两位数的和)

    <?php
        function fbnq($n){
            $n1=1;//斐波那契数列第一项初始为1
            $n2=1;//斐波那契数列第二项初始为1
            $result=0;
            for($i=3,$i<=$n;++$i){
                $result=$n1+$n2;
                $n1=$n2;//更新旧值
                $n2=$result;//更新旧值
            }
            return $result; 
        }
    
        $a=fbnq(7);//求斐波那契数列第7个数
        echo "斐波那契数列第7项为:".$a;

    //输出
    斐波那契数列第7项为:13

      

    4、快速排序的思想;

    通过一趟排序将待排记录分割成独立的两部分,其中一部分的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行快速排序,整个排序过程可以递归进行,以达到整个序列有序的目的

    代码:

    //找到要插入的位置
    function findPos(&$arr, $low, $high) {
        $target = $arr[$low];   //  将目标数存起来
        while ($low < $high) {
            //从右向左找小于target的数
            while ($low < $high && $arr[$high] > $target) {
                $high--;
            }
            $arr[$low] = $arr[$high];   //将arr[high]填到arr[low]中
            //从左向右找大于target的数
            while ($low < $high && $arr[$low] < $target) {
                $low++;
            }
            $arr[$high] = $arr[$low];   //将arr[low]填到arr[high]中
        }
        $arr[$high] = $target;  //此时low=high,将目标数填入这个坑中
        return $high;
    }
     
    function quitSort(&$arr,$low,$high){
        $pos = findPos($arr, $low, $high);
        if ($low<$pos-1){
            quitSort($arr,$low,$pos-1);
        }
        if ($pos+1 < $high){
            quitSort($arr,$pos+1,$high);
        }
    }
    $arr = [12,56,98,32,16,34,2,9,1];
    $len = count($arr);
    quitSort($arr,0,$len-1);
    dump($arr);
    

      

  • 相关阅读:
    [转]CR, LF, CR/LF区别与关系
    [转]Maven与nexus关系
    [转]Ubuntu默认使用root用户登录并免去输入密码
    [转]PL/SQL Developer 导入导出csv文件
    [转]关于胖客户端和瘦客户端的理解
    解决win7 安装完jdk7后,再安装jdk8出现的问题 has value '1.8', but '1.7' is required.
    [转]10 Awesome Indicator Applets for Ubuntu’s Unity Desktop
    简单的多对一传输ns2仿真
    论文阅读笔记 (2007-06-09)
    一个简单的ns2实验全过程
  • 原文地址:https://www.cnblogs.com/1500418882qqcom/p/10542164.html
Copyright © 2020-2023  润新知