• 算法之php版


    列出可能会用到的几个算法

    <?php
    /**
     * @desc 打印出一个菱形
     */
    function diamond($n)
    {
     for($i=0; $i<=$n; $i++)
     {
      for($j=0; $j<=$n-$i; $j++)
      {
       echo "&nbsp;";
      }
      for($k=0; $k<=2*$i; $k++)
      {
       echo "*";
      }
      echo "<br/>";
     }
     for($i=$n; $i>=0; $i--)
     {
      if($i==$n){continue;}
      for($j=0; $j<=$n-$i; $j++)
      {
       echo "&nbsp;";
      }
      for($k=0; $k<=2*$i; $k++)
      {
       echo "*";
      }
      echo "<br/>";
     }
    }
    diamond(3);

    /**
     * @desc 冒泡排序
     */
    function bubbleSort($arr)
    {
     $len = count($arr);
     for($i=0; $i<$len-1 ; $i++)
     {
      for($k=$i; $k<$len-1; $k++)
      {
       if($arr[$i] < $arr[$k+1])
       {
        $tmp = $arr[$i];
        $arr[$i] = $arr[$k+1];
        $arr[$k+1] = $tmp;
       } 
      }
     }
     return $arr;
    }
    $arr = array(9,2,7,4,8,5,6);
    bubbleSort($arr);

    /**
     * @desc 杨辉三角
     */
    function yangHui($n)
    {
     $arr = array();
     for($i=0; $i<$n; $i++)
     {
      //所有列的第一个
      $arr[$i][0]  = 1;
      //所有列的最后一个
      $arr[$i][$i]  = 1;
     }
     
     //第一行、第二行已经求出,所以从第三行开始
     for($i=2; $i<$n; $i++)
     {
      for($j=1; $j<$i; $j++)
      {
       //第i行,第j个的值 。等于 第i-1行的 第j 个值  加上  第i-1行的第j-1个的值,
       $arr[$i][$j] = $arr[$i-1][$j-1] + $arr[$i-1][$j];
      }
     }
     
     //打印结果
     //第一行、第二行已经求出,所以从第三行开始
     for($i=0; $i<$n; $i++)
     {
      for($j=0; $j<=$i; $j++)
      {
       echo $arr[$i][$j]."&nbsp;";
      }
      echo "<br/>" ;
     }
    }
    yangHui(10);

    /**
     * @desc 顺序插入    在一组数中,要求插入一个数,按其原来顺序插入,维护原来排序方式。
     */
    function orderInsert($arr, $int)
    {
     $len = count($arr);
     if($int > $arr[$len-1] )
     {
      $arr[$len] = $int;
      return $arr;
     }
     
     for($i=0; $i<$len; $i++)
     {
      if($arr[$i] > $int)
      {
       $t1 = $arr[$i];
       $arr[$i] = $int;
       for($j=$i+1; $j<$len+1; $j++)
       {
        @$t2 = $arr[$j];
        $arr[$j] = $t1;
        $t1 = $t2;
       }
       return $arr;
      }
     }
    }
    $arr = array(1,3,6,8,9);
    $int = 5;
    print_r(orderInsert($arr, $int));


    /**
     * @desc 二分查找
     */

    function  binarySearch($arr, $need, $low, $height)
    {
     static $i=0;
     static $process = array();
     $i++;
     
     if($height >= $low)
     {
      $mid = ceil(($low + $height)/2);
      array_push($process, $mid);
      if($arr[$mid] == $need)
      {
       //运行结果的下标 , 运行 次数 ,运行过程中的 $min
       return array("result"=>$mid, "times"=>$i, "process" =>$process);
      }
      elseif($arr[$mid] < $need)
      {
       return binarySearch($arr, $need, $mid+1, $height);
      }else
      {
       return binarySearch($arr, $need, $low, $mid-1);
      }
     }
    }
    $arr = range(1, 1234);
    $need = 999;
    $keys = array_keys($arr);
    $low = min($arr);
    $high = max($arr);
    $i=0;
    $result = binarySearch($arr, $need, $low, $high);
    echo "<hr/>";
    var_dump($result);

    //合并数组

    function merge()
    {
     $num  = func_num_args();
     $args = func_get_args();
     $arr = array();
     
     for($i=0; $i<$num; $i++)
     {
      if(is_array($args[$i]))
      {
       $len = count($args[$i]);
       for($j=0; $j<$len; $j++)
       {
        if(!in_array($args[$i][$j], $arr))
        {
         array_push($arr, $args[$i][$j]);
        }
       } 
      }
      else
      {
       die("第个参数不是数组");
      }
     }
     return $arr;
    }
    echo "<hr/>";
    var_dump(merge(range(1,8), range(6,10), range(10,15)));
    var_dump(array_merge(range(1,8), range(6,10), range(10,15)));

    //牛年求牛:有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛

    function t($n)
    {
     
     static $num = 1;
     for($i=0; $i<=$n; $i++)
     {
      if($i>=4 && $i < 15)
      {
       $num++;
       t($n-$i);
      }

      if($i==20)
      {
       $num--;
      }
     }
     return $num;
    }

    ?>

  • 相关阅读:
    Java基础算法--排序
    Java基础之String类的细节问题
    Java数据结构四之——二叉树的前、中、后序遍历
    动态规划之----最长公共子序列(LCS)
    最长公共子串问题
    makefile学习笔记
    使用正则表达式,去除C++的注释
    gbk字库音序对照表
    Fsharp 类中的空字段
    使用FSharp 探索Dotnet图像处理功能2--均衡灰度
  • 原文地址:https://www.cnblogs.com/fengwei/p/2613281.html
Copyright © 2020-2023  润新知