常见试题和算法

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

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;

}

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

来源: phpha发布时间:2015-04-14 17:24 阅读次数:141

时间: 2024-12-20 08:57:09

常见试题和算法的相关文章

java几种常见的排序算法总结

[java] view plain copy /*************几种常见的排序算法总结***************************/ package paixu; public class PaiXu { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:"); for(int i=0;i<20;i++){ num[i]=(int)(Math.random()*100)

数据结构之常见的排序算法c语言实现

常见的简单排序算法有冒泡排序.选择排序.插入排序.快排.堆排序.归并排序.希尔排序等,这些排序的理论在网上有很多,这就只给出常见的排序算法源码,上学时候写的,不足之处欢迎大家指正. 下面几种排序的主函数入口为:     int main(int argc, char* argv[])         {      int i, len;      int a[] = {8,5,6,4,9,10,3,15,2,17};           len = (sizeof(a) / sizeof(a[0

常见数据结构与算法整理总结

转载:http://www.jianshu.com/p/42f81846c0fb?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 一.概述 以前看到这样一句话,语言只是工具,算法才是程序设计的灵魂.的确,算法在计算机科学中的地位真的很重要,在很多大公司的笔试面试中,算法掌握程度的考察都占据了很大一部分.不管是为了面试还是自身编程能力的提升,花时间去研究常见的算法还是很有必要的.下面是自己对于算法这部分的学习总结. 算法

常见比较排序算法的比较

几种常见的排序算法之比较 排序的基本概念以及其算法的种类,介绍几种常见的排序算法的算法:冒泡排序.选择排序.插入排序.归并排序.快速排序.希尔排序的算法和分析它们各自的复杂度,然后以表格的形式,清晰直观的表现出它们的复杂度的不同.在研究学习了之前几种排序算法的基础上,讨论发现一种新的排序算法,并通过了进一步的探索,找到了新的排序算法较之前几种算法的优势与不足. 排序算法,是计算机编程中的一个常见问题.在日常的数据处理中,面对纷繁的数据,我们也许有成百上千种要求,因此只有当数据经过恰当的排序后,才

常见的排序算法

描述: 排序算法可谓数据结构模块中的重中之重,常见的哈希表,二叉树,搜索树/平衡树,位图等数据结构只是处理实际问题的抽象方法,实际在处理接受或生成的数据集时,排序算法显得尤其重要,排序算法家族很庞大,其中包括了冒泡排序,选择排序,插入排序,堆排序,快速排序,归并排序,基数排序,计数排序,希尔排序,箱排序,树型排序等众多算法,每种排序都有各自的特性,没有好坏之分,只有在特定的场景使用合适的排序算法才是上策,单纯的来比显得太过绝对,没有可比性.因为实际需求及各方面条件的限制使得排序算法的可选范围往往

Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构

在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习,说不定以后哪天面试正好用上,文章后半段则介绍一下collections模块,因为这个模块相对于python提供的基本数据结构(list,tuple,dict)不被人们所熟悉,但是如果你对他们了解的话,用起来也是非常方便高效的. 排序算法 一.冒泡排序(BubbleSort) 步骤: 比较相邻的元素,如果第一个比第二个大,就交换他们两个. 循环一遍后,最大的数就“浮”到了列表最后的位置. 将剩下的数再次

用Java来写常见的排序算法

随着校招的临近 算法是校招中很重要的一个部分 总结了常见几种排序算法,各种算法的时间复杂度和空间复杂度大家也需要多了解下 package com.huwei.sort; /** * 各种排序算法 * * @author huwei * */ public class Sort { public static void main(String[] args) { int[] a = { 60, 57, 89, 47, 57, 98, 45, 35, 73 }; Sort sort = new So

常见的距离算法和相似度(相关系数)计算方法

摘要: 1.常见的距离算法 1.1欧几里得距离(Euclidean Distance)以及欧式距离的标准化(Standardized Euclidean distance) 1.2马哈拉诺比斯距离(Mahalanobis Distance) 1.3曼哈顿距离(Manhattan Distance) 1.4切比雪夫距离(Chebyshev Distance) 1.5明可夫斯基距离(Minkowski Distance) 2.常见的相似度(系数)算法 2.1余弦相似度(Cosine Similari

常见的排序算法--java版

个人总结的常见的排序算法 public class Sort { // 1.冒泡:稳定,最优O(n) 最差O(n^2) 平均O(n^2) private static void sort1(int[] arr) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length - 1; j++) { if (arr[j] > arr[j + 1]) { int tmp = arr[j]; arr[j] = ar