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.",";
        }
    }
    


  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/liuqun/p/12655245.html
Copyright © 2011-2022 走看看