php实现的数组的几种排序

递推算法(斐波那契数列)

Code

<?php
    // 斐波那契数列
    // 公式:F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

    // 函数实现,递推思想
    function fibonacci($des){
        // $des,表示输出f[n]
        // 从第三个数开始,当是f[1]或者f[2]时,程序直接返回1
        if($des ==1 || $des==2){
            return 1;
        }
        
        // 定义f[1]和f[2]
        $f[1] = 1;
        $f[2] = 1;
        for($i=3;$i<=$des;$i++){
            $f[$i] = $f[$i-1] + $f[$i-2];
        }
        return $f[$des];
    }
    
    // 测试,f[1]和f[15]返回的结果
    echo fibonacci(1),'<hr/>';  
    echo fibonacci(15);  
?>

运行结果

php实现的数组的几种排序

递归算法(斐波那契数列,Fibonacci)

Code

<?php
    // 递归思想
    function fibonacci($n){
        // 递归出口:可以理解为循环执行条件 -> 满足条件,循环结束
        if($n == 1 || $n == 2){
            return 1;
        }

        // 递归点:可以理解为循体
        return fibonacci($n-1)+fibonacci($n-2);
    }

    // 测试
    echo fibonacci(15),'<hr/>';
    echo fibonacci(20);
?>

运行结果

php实现的数组的几种排序

冒泡算法(Bubble Sort)

Code

<?php
    // 冒泡排序(Bubble Sort)
    // 一组数组
    $arr = array(1,222,33,444,55,666,7);

    // 二次比较,循环比较所有数字
    for($i=0,$len=count($arr);$i<$len;$i++){
        // 一次比较,选出最大的数字
        for($j=0;$j<$len-1-$i;$j++){
            if($arr[$j]>$arr[$j+1]){
                $temp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $temp;
            }
        }
    }

    var_dump($arr);
?>

运行结果

php实现的数组的几种排序

选择排序(Selection Sort)

Code

    // 选择排序,优于冒泡排序
    $arr = array(1,3,2,44,4,21,312321,-12);

    // 1、确定比较次数
    for($i=0,$len=count($arr);$i<$len;$i++){
        // 2、$min变量记录最小的数字的下标
        $min = $i;
        // 3、多次比较,通过某次比较选出最小的数字的下标
        for($j=$i+1;$j<$len;$j++){
            if($arr[$j]<$arr[$min]){
                // 4、更换数组下标
                $min = $j;
            }
        }

        // 5、切换位置
        if($min != $i){
            $temp = $arr[$i];
            $arr[$i] = $arr[$min];
            $arr[$min] = $temp;
        }

    }

    var_dump($arr);

运行结果

php实现的数组的几种排序

插入排序(Insert Sort)

Code

<?php
    // 对于少量元素的排序,它是一个有效的算法
    // 需要排序的数组
    $arr = array(2,5,1,0,6,8,-89);

    // 确定需要排列的次数
    for($i=1,$len=count($arr);$i<$len;$i++){
        // 取出当前的数字
        $temp = $arr[$i];
        $change = false;
        // 比较,当前面的数字比后面的数字大的时候,交换位置
        for($j=$i-1;$j>=0;$j--){
            if($arr[$j] > $temp){
                $arr[$j+1] = $arr[$j];
                $change = true;
                //$arr[$j] = $temp;
            }else{
                // 如果正常的话,就break
                break;
            }
        }

        // 优化:只交换一次
        if($change){
            $arr[$j+1] = $temp;
        }
    }

    print_r($arr);
?>

运行结果

php实现的数组的几种排序

上一篇:python ----Fibonacci数列


下一篇:分治 - 1 (C++描述)