常用算法整理
2020-03-26 21:06:08 来源:admin 点击:804
//1000以内的素数 echo "素数:"; for($i=2;$i<1000;$i++) { static $count = 0; // 1000只能整除平方根的值 for($j=2;$j<=intval(sqrt($i));$j++) { if($i%$j==0) { $isPrime=false; break; } $isPrime=true; } if($isPrime) { $count++;//是素数,所以统计变量加1 echo $i ." "; } } echo "素数的个数为:".$count; ?> <?php //判断一个数是不是素数 function checkNum($num){ for($i=2;$i<$num;$i++){ if($num%$i == 0){ $isprime = false; break; } $isprime = true; } if($isprime){ echo '是素数'; }else{ echo '不是素数'; } } checkNum(991); ?> <?php echo "偶数:"; for($i=0;$i<1000;$i++) { static $count = 0; if($i%2 == 0){ echo $i .' '; $count ++; } } echo "偶数的个数为:".$count; ?> <?php //遍历文件和文件目录 function AllFile($dir){ if($dh = opendir($dir)){ while (($file = readdir($dh)) !== false){ if($file !='..' && $file !='.'){ if(is_dir($dir.'/'.$file)){ AllFile($dir.'/'.$file); //如果判断还是文件,则递归 }else{ echo $file; //输出文件名 } } } } } ?> <?php $mail = 'runoob@runoob.com'; //邮箱地址 $pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/"; preg_match($pattern, $mail, $matches); var_dump($matches); //输出匹配结果 ?> <?php //从小到大排序 function maopao($arr){ $count = count($arr); for($i = 0;$i<$count;$i++){ for($j = $count-1;$j>$i;$j--){ if($arr[$j]<$arr[$j-1]){ $temp = $arr[$j]; $arr[$j] = $arr[$j-1]; $arr[$j-1] = $temp; } } } return $arr; } $array = [2,3,9,4,6,8]; print_r(maopao($array)); ?> <?php //从大到小排序 function maopao2($array2){ $count = count($array2); $n = $count-1; for($i=0;$i<$count;$i++){ for($j=0;$j<$n;$j++){ if($array2[$j]<$array2[$j+1]){ $temp = $array2[$j+1]; $array2[$j+1] = $array2[$j]; $array2[$j] = $temp; } } } return $array2; } $array2 = [2,3,9,4,6,8]; print_r(maopao2($array2)); ?> <?php //快速排序 function quick_sort($array) { if (count($array) <= 1) return $array; //先获取第一个数 $key = $array[0]; //写两个数组,1号和2号 $left_arr = array(); $right_arr = array(); for ($i=1; $i<count($array); $i++){ //循环判断 第i个,如果比key小,放在左边 if ($array[$i] <= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i]; } $left_arr = quick_sort($left_arr); $right_arr = quick_sort($right_arr); //合并 return array_merge($left_arr, array($key), $right_arr); } $array2 = [2,3,9,4,6,8]; print_r(quick_sort($array2)); ?> <?php //字符串反转 function strrev_my($str){ for($i=0;true;$i++){ if(!isset($str[$i])){ break; } } $retrun = ''; for($j = $i-1;$j>=0;$j--){ $retrun .= $str[$j]; } return $retrun; } $strr = 'abcdefghijklmn'; echo strrev_my($strr); ?>
<?php function binsearch($x,$a){ //先算出总数 $c=count($a); //定义一个0和最后的数 $lower=0; $high=$c-1; //循环 while($lower<=$high){ $middle=intval(($lower+$high)/2); //求出中间数 if($a[$middle]>$x){ $high=$middle-1; } elseif($a[$middle]<$x){ $lower=$middle+1; } else{ return $middle; } } return false; } ?>
无限级分类
function tree($arr,$pid=0,$level=0){ static $list = array(); foreach ($arr as $v) { //如果是顶级分类,则将其存到$list中,并以此节点为根节点,遍历其子节点 if ($v['pid'] == $pid) { $v['level'] = $level; $list[] = $v; tree($arr,$v['id'],$level+1); } } return $list; }
字符串
<?php //普通字符反转 //输入abcdefghijkmlnopqistuvwxyz //输出zyxwvutsiqponlmkjihgfedcba //@autor 臧富祥 function str_rev($str){ for($i=0;true;$i++){ if(!isset($str[$i])){ break; } } //上面的也可以用strlen($str)代替求出$i的值 for($j=$i-1;$j>=0;$j--){ $str2 .= $str[$j]; } return $str2; } $a = str_rev('abcdefghijkmlnopqistuvwxyz'); echo $a; echo '<hr/>'; ?> <?php //单词反转 //输入 I am a student //输出 student am a I //@autor 臧富祥 function str_rev2($str){ $arr = explode(' ', $str); $count = count($arr); for($i=$count;$i>=0;$i--){ $str2 .= $arr[$i].' '; } return $str2; } $b = str_rev2('I am a student'); echo $b; echo '<hr/>'; ?> <?php //单词反转 //输入 I'm a very good student //输出 m'I a yrev doog tneduts //@autor 臧富祥 function str_rev3($str){ $arr = explode(' ', $str); foreach ($arr as $key => $value) { # code... $str2 = ''; $i = strlen($value); for($j=$i-1;$j>=0;$j--){ $str2 .= $value[$j]; } $str3 .= $str2.' '; } return $str3; } $c = str_rev3("I'm a very good student"); echo $c; echo '<hr/>'; ?>