《PHP教程:PHP面试常用算法(推荐)》要点:
本文介绍了PHP教程:PHP面试常用算法(推荐),希望对您有用。如果有疑问,可以联系我们。
PHP实例一、冒泡排序
PHP实例基本思想:
PHP实例对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换.这样比较小(大)的数值就将逐渐从后面向前面移动.
PHP实例//冒泡排序
- PHP实例
- <?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));
- ?>
PHP实例二、快速排序
PHP实例基本思想:
PHP实例在数组中挑出一个元素(多为第一个)作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,通过递归将各子序列分别划分为更小的序列直到所有的序列顺序一致.
PHP实例//快速排序
- PHP实例
- <?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));
- ?>
PHP实例三、二分查找
PHP实例基本思想:
PHP实例假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止.(数据量大的时候使用)
PHP实例//二分查找
- PHP实例
- <?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));
- ?>
PHP实例四、顺序查找
PHP实例基本思想:
PHP实例从数组的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败.
PHP实例//顺序查找
- PHP实例
- <?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;
- }
- }
- ?>
PHP实例五、写一个函数,能够遍历一个文件下的所有文件和子文件夹
- PHP实例
- <?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('../'));
- ?>
PHP实例六、写一个函数,尽可能高效的从一个标准url中取出文件的扩展名
- PHP实例
- <?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'));
- ?>
PHP实例七、实现中文字符串截取无乱码的方法
PHP实例可使用mb_substr,但是需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题.
PHP实例以上这篇PHP面试常用算法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持维易PHP.
转载请注明本页网址:
http://www.vephp.com/jiaocheng/5096.html