1. 程式人生 > >常見試題和算法

常見試題和算法

strlen explode text handle 計算 subst ever return bubble

一、常見字符串和文件操作

1PHP翻轉中文字符串

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‘

3PHP計算兩個文件的相對路徑

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‘

4PHP遍歷目錄下的所有文件和文件夾

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;

}

原文: http://blog.phpha.com/

來源: phpha 發布時間:2015-04-14 17:24 閱讀次數:141

常見試題和算法