常见试题和算法
Posted summer0space
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见试题和算法相关的知识,希望对你有一定的参考价值。
一、常见字符串和文件操作
1、php翻转中文字符串
1 2 3 4 5 6 7 8 9 |
function reverse($str){ $r = array(); for($i=0; $i<mb_strlen($str); $i++){ $r[] = mb_substr($str, $i, 1, ‘UTF-8‘); } return implode(array_reverse($r)); } echo reverse(‘www.phpha.com天涯PHP博客‘); //结果:‘客博PHP涯天moc.ahphp.wwww‘ |
2、PHP计算URL的文件后缀名
1 2 3 4 5 6 7 8 |
function getext($url){ $data = parse_url($url); $path = $data[‘path‘]; $info = pathinfo($path); return $info[‘extension‘]; } echo getext(‘http://blog.phpha.com/archives/1670.html?id=1670‘); //结果:‘html‘ |
3、PHP计算两个文件的相对路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function getrpath($path, $conpath){ $pathArr = explode(‘/‘, $path); $conpathArr = explode(‘/‘, $conpath); $dismatchlen = 0; for($i=0; $i<count($pathArr); $i++){ if($conpathArr[$i] != $pathArr[$i]){ $dismatchlen = count($pathArr) - $i; $arrleft = array_slice($pathArr, $i); break; } } return str_repeat(‘../‘, $dismatchlen).implode(‘/‘, $arrleft); } $a = ‘/a/b/c/d/e.php‘; $b = ‘/a/b/12/34/5.php‘; echo getrpath($a, $b); //结果:‘../../../c/d/e.php‘ |
4、PHP遍历目录下的所有文件和文件夹
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 |
function finddir($dir){ $files = array(); if(is_dir($dir)){ if($handle = opendir($dir)){ while(($file = readdir($handle)) !== false){ if($file != ‘.‘ && $file != ‘..‘){ if(is_dir(rtrim($dir, ‘/‘).‘/‘.$file)){ $files[$file] = finddir(rtrim($dir, ‘/‘).‘/‘.$file); }else{ $files[] = rtrim($dir, ‘/‘).‘/‘.$file; } } } closedir($handle); } } return $files; } print_r(finddir(‘F:/Golang/src‘)); //结果: Array ( [0] => F:/Golang/src/hello.go [1] => F:/Golang/src/src.exe [test] => Array ( [0] => F:/Golang/src/test/sss.txt )
) |
二、常见算法的实现
1、冒泡排序
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function bubble_sort($arr) { $n=count($arr); for($i=0;$i<$n-1;$i++){ for($j=$i+1;$j<$n;$j++) { if($arr[$j]<$arr[$i]) { $temp=$arr[$i]; $arr[$i]=$arr[$j]; $arr[$j]=$temp; } } } return $arr; } |
2、归并排序
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 |
function Merge(&$arr, $left, $mid, $right) { $i = $left; $j = $mid + 1; $k = 0; $temp = array(); while ($i <= $mid && $j <= $right) { if ($arr[$i] <= $arr[$j]) $temp[$k++] = $arr[$i++]; else $temp[$k++] = $arr[$j++]; } while ($i <= $mid) $temp[$k++] = $arr[$i++]; while ($j <= $right) $temp[$k++] = $arr[$j++]; for ($i = $left, $j = 0; $i <= $right; $i++, $j++) $arr[$i] = $temp[$j]; }
function MergeSort(&$arr, $left, $right) { if ($left < $right) { $mid = floor(($left + $right) / 2); MergeSort($arr, $left, $mid); MergeSort($arr, $mid + 1, $right); Merge($arr, $left, $mid, $right); } } |
3、二分查找-递归
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function bin_search($arr,$low,$high,$value) { if($low>$high) return false; else { $mid=floor(($low+$high)/2); if($value==$arr[$mid]) return $mid; elseif($value<$arr[$mid]) return bin_search($arr,$low,$mid-1,$value); else return bin_search($arr,$mid+1,$high,$value); } } |
4、二分查找-非递归
1 2 3 4 5 6 7 8 9 10 11 12 |
function bin_search($arr,$low,$high,$value) { while($low<=$high) { $mid=floor(($low+$high)/2); if($value==$arr[$mid]) return $mid; elseif($value<$arr[$mid]) $high=$mid-1; else $low=$mid+1; } return false; } |
5、快速排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function quick_sort($arr) { $n=count($arr); if($n<=1) return $arr; $key=$arr[0]; $left_arr=array(); $right_arr=array(); for($i=1;$i<$n;$i++) { if($arr[$i]<=$key) $left_arr[]=$arr[$i]; else $right_arr[]=$arr[$i]; } $left_arr=quick_sort($left_arr); $right_arr=quick_sort($right_arr); return array_merge($left_arr,array($key),$right_arr); } |
6、选择排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function select_sort($arr) { $n=count($arr); for($i=0;$i<$n;$i++) { $k=$i; for($j=$i+1;$j<$n;$j++) { if($arr[$j]<$arr[$k]) $k=$j; } if($k!=$i) { $temp=$arr[$i]; $arr[$i]=$arr[$k]; $arr[$k]=$temp; } } return $arr; } |
7、插入排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function insertSort($arr) { $n=count($arr); for($i=1;$i<$n;$i++) { $tmp=$arr[$i]; $j=$i-1; while($arr[$j]>$tmp) { $arr[$j+1]=$arr[$j]; $arr[$j]=$tmp; $j--; if($j<0) break; } } return $arr; } |
来源: phpha 发布时间:2015-04-14 17:24 阅读次数:141
以上是关于常见试题和算法的主要内容,如果未能解决你的问题,请参考以下文章