侧边栏壁纸
博主昵称
流苏小筑

步伐虽小,密而不止

PHP-常见算法

2019年03月03日 122阅读 0评论 0点赞

1:请写出常见的排序算法,并用PHP实现冒泡排序,将数组按照从小到大的方式进行排序

冒泡排序的原理和实现

  • 原理:两辆相邻的数进行比较,如过反序就交换,否则将就不交换
  • 时间复杂度:最坏(O(n^2)),平均(O(n^2))
  • 空间复杂度:O(1)
    冒泡排序

延伸:时间复杂度和空间复杂度的概念

  • 时间复杂度:执行算法所需要的计算工作量

    • 时间复杂度计算方式
    • O(n) --线性阶
      线性阶
    • O(1) -- 常数阶
      常数阶
    • O(n^2) -- 平方阶
      平方阶
  • 常见的时间复杂度:常数阶,线性阶,平方阶,立方阶,对数阶,nlog2n阶,指数皆
  • 空间复杂度:算法需要消耗的内存空间,记作S(n)=O(f(n))

    • 包括程序代码所占用的空间,输入数据所占用的空间和辅助变量所占用的空间这三方面空间
    • 空间复杂度计算方式(与时间复杂度类似)

    用空间换取时间

    • 冒泡排序的元素交换,空间(时间)复杂度O(1)

冒泡排序,直接插入排序,希尔排序,选择排序,快速排序,堆排序,归并排序

二分查找

时间复杂度:最差(O(log2n)),平均(O(log2n))
空间复杂度:迭代(O(1)),递归(O(log2n))


1,1,2,3,5,8,13,21,34...求第30位的数是多少,请用伪代码描述其实现方法


    $arr = [1,1];
    for ($i = 2; $i < 30; $i++) {
        $arr[$i] = $arr[$i - 1] + $arr[$i - 2];
    }
    echo $arr[29];

写一个函数,实现以下功能:字符串"opend_door" 转换成 "OpenDoor","make_by_id" 转换成 "MakeByid"


function get_str ($str)
   {
           $arr = explode('_', $str);
           $new_str = '';
           for ($i = 0; $i < count($arr); $i++) {
               $new_str .= ucwords($arr[$i]);
        }
           
           return $new_str;
   }
    
   $str = 'open_door';
   
   echo get_str($str);

不适用PHP函数,用方法写一个反转字符串的函数

function get_str ($str)
   {
           $new_str = '';
           
           for ($j = 0; true; $j++) {
               if (!isset($str[$j])) {
                   break;
            }
        }
           
           for ($i = $j - 1; $i >= 0; $i--) {
               $new_str .= $str[$i];
        }
           
           return $new_str;
   }
   
   $str = 'abcdef';
   
   echo get_str($str);

不使用array_merge()完成多个数组的合并

function my_merge ()
    {
        $arr = func_get_args();
        
        $str = '';
        for ($i = 0; $i < count($arr); $i++) {
            if (!is_array($arr[$i])) return '参数错误';
            $str .= implode(',', $arr[$i]) . ',';
        }

        $str = trim($str, ',');
        $arr_tol = explode(',', $str);
        
        return $arr_tol;
    }
    
    $arr1 = [1,3];
    $arr2 = [6,4];
    
    echo '<pre>';
    var_dump(my_merge($arr1, $arr2));

0

—— 评论区 ——

昵称
邮箱
网址
取消
博主栏壁纸
博主头像 流苏小筑

步伐虽小,密而不止

135 文章数
27 标签数
16 评论量