首页 > 开发 > PHP > 正文

PHP经典算法集锦【经典收藏】

2024-05-04 22:52:42
字体:
来源:转载
供稿:网友

本文实例总结了PHP经典算法。分享给大家供大家参考,具体如下:

1、首先来画个菱形玩玩,很多人学C时在书上都画过,咱们用PHP画下,画了一半。

思路:多少行for一次,然后在里面空格和星号for一次。

<?phpfor($i=0;$i<=3;$i++){  echo str_repeat(" ",3-$i);  echo str_repeat("*",$i*2+1);  echo '<br/>';}

2、冒泡排序,C里基础算法,从小到大对一组数排序。

思路:这题从小到大,第一轮排最小,第二轮排第二小,第三轮排第三小,依次类推……

<?php$arr = array(1,3,5,32,756,2,6);$len = count($arr);for ($i=0;$i<$len-1;$i++){  for ($j=$i+1;$j<$len;$j++){    if($arr[$i]>$arr[$j]){//从小到大      $p = $arr[$i];      $arr[$i] = $arr[$j];      $arr[$j]= $p;    }  }}var_dump($arr);

3、杨辉三角,用PHP写。

思路:每一行的第一位和最后一位是1,没有变化,中间是前排一位与左边一排的和,这种算法是用一个二维数组保存,另外有种算法用一维数组也可以实现,一行 一行的输出,有兴趣去写着玩下。

1
1   1
1   2   1
1   3   3   1
1   4   6   4   1
1   5  10  10   5   1

<?php//每行的第一个和最后一个都为1,写了6行 for($i=0; $i<6; $i++) {  $a[$i][0]=1;  $a[$i][$i]=1; }//出除了第一位和最后一位的值,保存在数组中 for($i=2; $i<6; $i++) {  for($j=1; $j<$i; $j++) {   $a[$i][$j] = $a[$i-1][$j-1]+$a[$i-1][$j];  } }//打印 for($i=0; $i<6; $i++){  for($j=0; $j<=$i; $j++) {  echo $a[$i][$j].' ';  }  echo '<br/>'; }

4、在一组数中,要求插入一个数,按其原来顺序插入,维护原来排序方式。

思路:找到比要插入数大的那个位置,替换,然后把后面的数后移一位。

<?php$in = 2;$arr = array(1,1,1,3,5,7);$n = count($arr);//如果要插入的数已经最大,直接打印if($arr[$n-1] < $in) {  $arr[$n+1] = $in; print_r($arr);  }for($i=0; $i<$n; $i++) {//找出要插入的位置  if($arr[$i] >= $in){    $t1= $arr[$i];    $arr[$i] = $in;//把后面的数据后移一位    for($j=$i+1; $j<$n+1; $j++) {      $t2 = $arr[$j];      $arr[$j] = $t1;      $t1 = $t2;  }//打印  print_r($arr);  die;  }}

5、对一组数进行排序(快速排序算法)。

思路:通过一趟排序分成两部分,然后递归对这两部分排序,最后合并。

<?phpfunction q($array) {  if (count($array) <= 1) {return $array;}//以$key为界,分成两个子数组  $key = $array[0];  $l = array();  $r = array();//分别进行递归排序,然后合成一个数组  for ($i=1; $i<count($array); $i++) {  if ($array[$i] <= $key) { $l[] = $array[$i]; }  else { $r[] = $array[$i]; } }  $l = q($l);  $r = q($r);  return array_merge($l, array($key), $r);}$arr = array(1,2,44,3,4,33);print_r( q($arr) );            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表