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