zoukankan      html  css  js  c++  java
  • 常见试题和算法

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

    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'

    2PHP计算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

  • 相关阅读:
    MySQL体系结构
    详解MySQL的用户密码过期/锁定解锁功能
    MySQL5.7 密码安全策略
    Python终端如何输出彩色字体
    flashback
    PXC 部署前置检查
    CentOS7 安装docker
    CentOS7 安装ifconfig
    CentOS 7 网络配置
    VMware虚拟机克隆Linux系统引起的网卡问题
  • 原文地址:https://www.cnblogs.com/summer0space/p/7247871.html
Copyright © 2011-2022 走看看