ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php实现的数组的几种排序

2021-04-15 15:04:48  阅读:177  来源: 互联网

标签:Sort arr Code temp echo 排序 数组 php fibonacci


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

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);  
?>

运行结果

递归算法(斐波那契数列,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);
?>

运行结果

冒泡算法(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);
?>

运行结果

选择排序(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);

运行结果

插入排序(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);
?>

运行结果

标签:Sort,arr,Code,temp,echo,排序,数组,php,fibonacci
来源: https://www.cnblogs.com/shley/p/14662405.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有