zoukankan      html  css  js  c++  java
  • 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.",";
        }
    }
    


  • 相关阅读:
    增值业务
    话题:jQuery 关于文件上传表单处理的一个非常怪异的问题
    net use 的使用
    c#开发snmp应用
    PowerDesigner15使用时的十五个问题
    一段JS代码,让你的WordPress支持简繁转换(转)
    聚集索引查询优化
    NHibernate 2.1.2相关地址
    Oracle expdp/impdp导出导入命令及数据库备份(转)
    大型ORACLE数据库优化设计方案
  • 原文地址:https://www.cnblogs.com/liuqun/p/12655245.html
Copyright © 2011-2022 走看看