如何应对PHP冒泡排序的面试题,要掌握什么算法
导读:相信很多人对“如何应对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冒泡排序的面试题,要掌握什么算法
本文地址: https://pptw.com/jishu/651085.html
