php 数组从后向前查找_php数组排序和查找的算法

php算法

// 算法
// 1.冒泡排序 => 思路:​每次循环排列出一个最大的数
// echo '<pre>';
$arr = [
    1,43,54,62,21,66,32,78,36,76,39
];//11

function getPao($arr){
    $len = count($arr);

    for($i=1;$i<$len;$i++){

        for($j=0;$j<$len-$i;$j++){
            if($arr[$j]>$arr[$j+1]){
                $tmp = $arr[$j+1];
                $arr[$j+1] = $arr[$j];
                $arr[$j] = $tmp;
            }
        }

    }
    return $arr;
}

// $arr = getPao($arr);
// var_dump($arr);

// 2. 选择排序
function selectSort($arr){
    for($i=0,$len=count($arr);$i<$len-1;$i++){
        $p = $i;
        for($j=$i+1;$j<$len;$j++){
            if($arr[$p]>$arr[$j]){
                $p=$j;
            }
        }
        if($p != $i){
            $tmp = $arr[$p];
            $arr[$p] = $arr[$i];
            $arr[$i] = $tmp;
        }
        var_dump($arr);echo '<br/>';
    }
    return $arr;
}
$arr = selectSort($arr);exit;
// var_dump($arr);
/*
$arr = [
    1,43,54,62,21,66,32,78,36,76,39
];//11
*/
// 3 插入排序
function insertSort($arr){
    for($i=1,$len=count($arr);$i<$len;$i++){
        $tmp = $arr[$i];

        for($j=$i-1;$j>=0;$j--){
            if($tmp < $arr[$j]){
                $arr[$j+1] = $arr[$j];
                $arr[$j] = $tmp;
            }else{
                break;
            }
        }
        // var_dump($arr);echo '<br/>';
    }
    return $arr;
}
// $arr = insertSort($arr);exit;

// var_dump($arr);

// 4.快速排序
/*
思路:先对数组进行分割, 把大的元素数值放到一个临时数组里,把小的元素数值放到另一个临时数组里(这个分割的点可以是数组中的任意一个元素值,一般用第一个元素,即$array[0]),然后继续把这两个临时数组重复上面拆分,
最后把小的数组元素和大的数组元素合并起来。这里用到了递归的思想。 
*/

function quick_sork($arr){
    if (!is_array($arr)) return ;

    $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_sork($left);
    $right = quick_sork($right);

    return array_merge($left,[$arr[0]],$right);
}

$arr = quick_sork($arr);

var_dump($arr);

// 参考资料:https://www.cnblogs.com/isykw/p/6115461.html


// 5. 二分查找法
// 二分查找的数组必须是排列好的
function binSearch($arr,$search){
    $height = count($arr)-1;

    $low = 0;
    while($low<=$height){
        $mid = floor(($low+$height)/2);// 获取中间数
        if($arr[$mid] == $search){
            return $mid;
        }elseif($arr[$mid] < $search){
            $low = $mid+1;
        }elseif($arr[$mid] >$search){
            $height = $mid-1;
        }
    }
    return '查找失败';
}

// $search = binSearch($arr,43);
// var_dump($search);

// 二分查找递归实现
function binSearch2($arr,$low,$height,$k){
    if($low<=$height){
        $mid = floor(($low+$height)/2);
        if($arr[$mid] == $k){
            return $mid;
        }elseif($arr[$mid]<$k){
            return binSearch2($arr,$mid+1,$height,$k);
        }elseif($arr[$mid]>$k){
            return binSearch2($arr,$low,$mid-1,$k);
        }
    }
    return  -1;
}

$search = binSearch($arr,43);
var_dump($search);

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要

PHP进阶架构师>>>视频、面试文档免费获取​docs.qq.com
7854cdfa7f78ed734676f5071a8f75de.png

或者关注咱们下面的专栏

PHP架构师之路​zhuanlan.zhihu.com
1d0d460e9c711ab9da1dc421ab5636d5.png
来源:https://www.cnblogs.com/myvic/p/8342119.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值