PHP面试常用算法(推荐)

2025-05-29 0 65

一、冒泡排序

基本思想:

对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换。这样比较小(大)的数值就将逐渐从后面向前面移动。

//冒泡排序

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28
<?php

function mysort($arr)

{

for($i = 0; $i < count($arr); $i++)

{

$isSort = false;

for ($j=0; $j< count($arr) - $i - 1; $j++)

{

if($arr[$j] < $arr[$j+1])

{

$isSort = true;

$temp = $arr[$j];

$arr[$j] = $arr[$j+1];

$arr[$j+1] = $temp ;

}

}

if($isSort)

{

break;

}

}

return $arr;

}

$arr = array(3,1,2);

var_dump(mysort($arr));

?>

二、快速排序

基本思想:

在数组中挑出一个元素(多为第一个)作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,通过递归将各子序列分别划分为更小的序列直到所有的序列顺序一致。

//快速排序

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41
<?php

//快速排序

function quick_sort($arr)

{

//先判断是否需要继续进行

$length = count($arr);

if($length <= 1)

{

return $arr;

}

$base_num = $arr[0];//选择一个标尺 选择第一个元素

//初始化两个数组

$left_array = array();//小于标尺的

$right_array = array();//大于标尺的

for($i=1; $i<$length; $i++)

{ //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内

if($base_num > $arr[$i])

{

//放入左边数组

$left_array[] = $arr[$i];

}

else

{

//放入右边

$right_array[] = $arr[$i];

}

}

//再分别对 左边 和 右边的数组进行相同的排序处理方式

//递归调用这个函数,并记录结果

$left_array = quick_sort($left_array);

$right_array = quick_sort($right_array);

//合并左边 标尺 右边

return array_merge($left_array, array($base_num), $right_array);

}

$arr = array(3,1,2);

var_dump(quick_sort($arr));

?>

三、二分查找

基本思想:

假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。(数据量大的时候使用)

//二分查找

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27
<?php

//二分查找

function bin_search($arr,$low,$high,$k)

{

if($low <= $high)

{

$mid = intval(($low + $high)/2);

if($arr[$mid] == $k)

{

return $mid;

}

else if($k < $arr[$mid])

{

return bin_search($arr,$low,$mid-1,$k);

}

else

{

return bin_search($arr,$mid+1,$high,$k);

}

}

return -1;

}

$arr = array(1,2,3,4,5,6,7,8,9,10);

print(bin_search($arr,0,9,3));

?>

四、顺序查找

基本思想:

从数组的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败。

//顺序查找 

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23
<?php

//顺序查找

function seq_search($arr,$n,$k)

{

$array[$n] = $k;

for($i = 0;$i < $n; $i++)

{

if($arr[$i] == $k)

{

break;

}

}

if($i < $n)

{

return $i;

}

else

{

return -1;

}

}

?>

五、写一个函数,能够遍历一个文件下的所有文件和子文件夹

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28
<?php

function my_scandir($dir)

{

$files = array();

if($handle = opendir($dir))

{

while (($file = readdir($handle))!== false)

{

if($file != '..' && $file != '.')

{

if(is_dir($dir."/".$file))

{

$files[$file]=my_scandir($dir."/".$file);

}

else

{

$files[] = $file;

}

}

}

closedir($handle);

return $files;

}

}

var_dump(my_scandir('../'));

?>

六、写一个函数,尽可能高效的从一个标准url中取出文件的扩展名

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
<?php

function getExt($url)

{

$arr = parse_url($url);//parse_url解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分

//'scheme' => string 'http' (length=4)

//'host' => string 'www.sina.com.cn' (length=15)

//'path' => string '/abc/de/fg.php' (length=14)

//'query' => string 'id=1' (length=4)

$file = basename($arr['path']);// basename函数返回路径中的文件名部分

$ext = explode('.', $file);

return $ext[count($ext)-1];

}

print(getExt('http://www.sina.com.cn/abc/de/fg.html.php?id=1'));

?>

七、实现中文字符串截取无乱码的方法

可使用mb_substr,但是需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

以上这篇PHP面试常用算法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP面试常用算法(推荐) https://www.kuaiidc.com/97839.html

相关文章

发表评论
暂无评论