PHP算法 (冒泡 选择排序 折半查找 顺序查找 斐波那契数列 素数 )

1冒泡算法

<?php 
function bubble($arr){
   $n = count($arr);
   for ($i=0; $i <$n-1 ; $i++) { 
      for ($j=0; $j <$n-1-$i ; $j++) { 
         if($arr[$j]>$arr[$j+1]){
            $tem = $arr[$j];
            $arr[$j]=$arr[$j+1];
            $arr[$j+1]=$tem;
         }
      }
   }
   return $arr;
}
$arr=[1,26,6,2,9,22,33,29,21];
print_r(bubble($arr));

2 选择排序

<?php 
function select($arr){
   $n = count($arr);
   for ($i=0; $i <$n-1 ; $i++) { 
      $index = $i;
      for ($j=$i+1; $j <$n; $j++) { 
            if($arr[$index]>$arr[$j]){
               $index = $j;
            }  
      }
      $tem=$arr[$i];
      $arr[$i]=$arr[$index];
      $arr[$index]=$tem;  
   }
   return $arr;
}
 $arr=[1,9,2,35,22,66,26,36,32];
 print_r(select($arr));

3折半查找

<?php 
function half($arr,$target){
   $start = 0;
   $end =count($arr)-1;
   while($start<=$end){
      $middle =(int)(($start+$end)/2);
      if($target ==$arr[$middle]){
         return $middle;
      }
      if ($target>$arr[$middle]) {
         $start = $middle +1;
      }else{
         $end = $middle-1;
      }
   }
   return false;
}
$arr =[12,15,16,26,27,29];
$pos =half($arr,333);
if($pos===false){
   echo "没有找到";
}else{
   echo "下标".$pos;
}

4顺序查找

<?php 
function search($arr,$target){
   foreach ($arr as $key => $value) {
      if($target == $value){
         return $key;
        }
     }
         return false;
}
$arr=[1,2,22,15,36,16];

print_r(search($arr,1111));

5斐波那契数列 (生兔子问题)

<?php
/**
 * Created by PhpStorm.
 * User: 15300
 * Date: 2017/11/28
 * title:递归斐波那契数列
 * 递归算法(思想)
 */
function feibo($n){
    if($n==1){
        return 1;
    }elseif($n==2){
        return 2;
    }else{
        return feibo($n-1)+feibo($n-2);
    }
}
echo feibo(5);

/*
 * 递推思想(迭代思想)
 */
function jiecheng($n){
    if($n==1){
        return 1;
    }
    $res=1;
    for ($i=2;$i<=$n;$i++){
          $res *=$i;
    }
    return $res;
}
echo '6的阶乘'.jiecheng(6);

/*
 * 斐波那契数列
 * 迭代思想
 */
function fib($n){
    if($n<1) return -1;
    $a[1]=$a[2]=1;
    for ($i=3;$i<=$n;$i++){
        $a[$i]=$a[$i-1]+$a[$i-2];
    }
    return end($a);
}
echo fib(10);

/*
 * 斐波那契数列
 * @param [int] $n [第n项]
 * @return [int] [结果]
 */
function fibonacci($n){
    //非法
    if($n<1) return false;

    //出口
    if ($n==1||$n==2) return 1;

    //入口
    $res=fibonacci($n-1)+fibonacci($n-2);
    return $res;
}
$a=isset($_GET['a'])?$_GET['a']:0;
echo fibonacci($a);

6素数

<?php
/**
 * Created by PhpStorm.
 * User: 15300
 * Date: 2017/11/29
 * Time: 18:59
 */
/*
 * 判断参数是否是素数
 * @param int $n 目标值
 * @return boolean [是否是]
 * 输出2-200之间所有的素数
 */
function prime($n){
    if($n<=1) return false;
    for ($i=2,$cnt=1;$i<=$n;$i++){
        if($n%$i==0){
            $cnt ++;
        }
    }
    if ($cnt==2){
        return true;
    }
    return false;
}
for ($i=2;$i<=200;$i++){
    if (prime($i)){
        echo $i."<br>";
    }
}

/*
 * 判断一个数是否是一个素数
 * 法二
 */
function prime($n){
    if(is_numberic($n)){
        //先判断是否是一个数字
        $count = 0;//用于记录能够整除的个数
        for ($i=1;$i<=$n;$i++){
            if($n%$i==0){
                $count++;
            }
        }
        if ($count==2){
            return true;
        }else{
            return false;
        }
    }else{
        return false;
    }
}
for ($i=2;$i<=200;$i++){
    if(prime($i)==true){
        echo $i.",";
    }
}


原文地址:https://www.cnblogs.com/liuqun/p/12655245.html