首页后端开发PHP如何应对PHP冒泡排序的面试题,要掌握什么算法

如何应对PHP冒泡排序的面试题,要掌握什么算法

时间2024-03-23 04:00:03发布访客分类PHP浏览1473
导读:相信很多人对“如何应对PHP冒泡排序的面试题,要掌握什么算法”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助 前言PHP 是世界上最好的语言,一度认为算法对于 PHPer 是多余的存在,而往往面试来讲也...
相信很多人对“如何应对PHP冒泡排序的面试题,要掌握什么算法”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助

 

前言

PHP 是世界上最好的语言,一度认为算法对于 PHPer 是多余的存在,而往往面试来讲也有略微的考察,相信大家在大多数面试情况下都会被要求写冒泡排序,然而也有部分 PHPer 连冒泡排序都写半天(比如我)

一般面试以下几种算法足以应对!!!如有错误请评论修订,谢谢!

已完成

  • 斐波那契数列

  • 扫描文件夹

  • 二分查找

  • 冒泡排序

  • 快速排序

  • LeetCode 第一题

TODO

  • 堆排序

  • 选择排序

  • 链表翻转

  • 动态规划

?php
class Algorithmic {

    /***
     * 斐波那契数递归法,f(n) = f(n-1) + f(n-2) 递归层级太多,调用栈爆满,100层
     */
    function fib($n) {

        if ($n  2) {
    
            return 1;

        }
 else {
    
            return $this->
    fib($n - 1) + $this->
    fib($n - 2);

        }

    }

    /***
     * 使用数组存储每一个fib(n)的数值,空间复杂度增加
     * @param $dir
     * @return array
     */
    function fib2($n) {

        if ($n  2) {
    
            return 1;

        }
 else {
    
            $arr = [1, 1];
    
            for ($i = 2;
     $i = $n;
 $i++) {
    
                $arr[$i] = $arr[$i - 1] + $arr[$i - 2];

            }

        }
    
        return $arr[$n];

    }

    /***
     * 使用两个临时变量存储前两个值fib(n)的数值,空间复杂度增加比数组降低
     * @param $dir
     * @return array
     */
    function fib3($n) {

        if ($n  2) {
    
            return 1;

        }
 else {
    
            $last = 1;
      //等式第二项
            $lastLast = 1;
      //等式第一项
            for ($i = 2;
     $i = $n;
 $i++) {
    
                $current = $last + $lastLast;
    
                $lastLast = $last;
    
                $last = $current;

            }
    
            return $current;

        }

    }

    /***
     * 扫描文件目录
     * @param $dir
     * @return array
     */
    function scanFile($dir) {
    
        $fileList = [];

        if (is_dir($dir)) {
    
            $dh = opendir($dir);

            while ($file = readdir($dh)) {
    
                if ($file == '.' || $file == '..') continue;
      //linux下一切皆文件
                $newDir = $dir . '/' . $file;

                if (is_dir($newDir)) {
    
                    $fileList[][$file] = $this->
    scanFile($newDir);

                }
 else {
    
                    $fileList[] = $file;

                }

            }
    
            closedir($dh);

        }
    
        return $fileList;

    }

    /***
     * 二分查找
     */
    function binarySort($arr, $target) {

        if (!is_array($arr) || count($arr)  2) {
    
            return $arr;

        }
    
        $len = count($arr);
    
        $start = 0;
    
        $end = $len - 1;

        while ($start = $end) {
    
            $middle = floor(($start + $end) / 2) ;

            if ($arr[$middle] == $target) {
    
                return $middle;

            }
 elseif ($arr[$middle]  $target) {
    
                $start = $middle + 1;

            }
 else {
    
                $end = $middle - 1;

            }

        }
    
        return false;

    }

    /***
     * 冒泡排序
     */
    function bubbleSort($arr) {
    
        for ($i = count($arr) - 1;
     $i >
     0;
 $i--) {
    
            for ($j = 0;
     $j  $i;
 $j++) {

                if ($arr[$j+1]  $arr[$j]) {
    
                    $temp = $arr[$j];
    
                    $arr[$j] = $arr[$j+1];
    
                    $arr[$j+1] = $temp;

                }

            }

        }
    
        return $arr;

    }

    /***
     * 快排序
     */
    function quickSort($arr) {

        if (!is_array($arr) || count($arr)  2) {
    
            return $arr;

        }
    
        $base = $arr[0];
    
        $left = [];
    
        $right = [];
    
        for ($i = 1;
     $i = count($arr) - 1;
 $i++) {

            if ($arr[$i]  $base) {
    
                $left[] = $arr[$i];

            }
 else {
    
                $right[] = $arr[$i];

            }

        }
    
        return array_merge(array_merge($this->
    quickSort($left),[$base]), $this->
    quickSort($right));

    }

    /***
     * 两数之和, LeetCode第一题
     * @param $arr
     */
    function twoSum($arr, $sum = 8){
    
        $tempArr = [];
    
        foreach ($arr as $k =>
 $v) {

            if (isset($tempArr[$v])) {
    
                return [$k, $tempArr[$v]];

            }
    
            $tempArr[$sum-$v] = $k;

        }
    
        return [];

    }

}
    
$algorithmic = new Algorithmic();
    
//var_dump($algorithmic->
    scanFile("./"));
    
//var_dump($algorithmic->
    twoSum([4,5,3,4,5,67,787]));
    
//var_dump($algorithmic->
    fib3(4));
      // 1 1 2 3 5
//var_dump($algorithmic->
    binarySort([1,3, 4, 5,7,9], 3));
      //
var_dump($algorithmic->
    quickSort([14,5,13,114,4,3,167,87,14]));
    



以上就是关于如何应对PHP冒泡排序的面试题,要掌握什么算法的介绍啦,需要的朋友可以参考上述内容,希望对大家有帮助,欢迎关注网络,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

php

若转载请注明出处: 如何应对PHP冒泡排序的面试题,要掌握什么算法
本文地址: https://pptw.com/jishu/651085.html
Oracle游标有什么用,有哪些类型,用法是怎样 CSS中涉及的英文有哪些,意思是什么

游客 回复需填写必要信息