PHP各种常见经典算法总结【排序、查找、翻转等】
本文实例讲述了PHP各种常见经典算法。分享给大家供大家参考,具体如下:
冒泡排序算法
publicfunctiontest(){ $arr=array(43,54,62,21,66,32,78,36,76,39); var_dump($arr); echo'
'; $arr=$this->bubbleSort($arr); var_dump($arr); } publicfunctionbubbleSort($arr){ $len=count($arr); //该层循环控制需要冒泡的轮数 for($i=1;$i<$len;$i++){ //该层循环用来控制每轮冒出一个数需要比较的次数 for($k=0;$k<$len-$i;$k++){ if($arr[$k]>$arr[$k+1]){ $tmp=$arr[$k+1];//声明一个临时变量 $arr[$k+1]=$arr[$k]; $arr[$k]=$tmp; } } } return$arr; }
快速排序
publicfunctionquick_sort($arr){ //先判断是否需要继续进行 $length=count($arr); if($length<=1){ return$arr; } $base_num=$arr[0];//选择一个标尺选择第一个元素 //初始化两个数组 $left_array=array();//小于标尺的 $right_array=array();//大于标尺的 for($i=1;$i<$length;$i++){//遍历除了标尺外的所有元素,按照大小关系放入两个数组内 if($base_num>$arr[$i]){ //放入左边数组 $left_array[]=$arr[$i]; }else{ //放入右边 $right_array[]=$arr[$i]; } } //再分别对左边和右边的数组进行相同的排序处理方式 //递归调用这个函数,并记录结果 $left_array=$this->quick_sort($left_array); $right_array=$this->quick_sort($right_array); //合并左边标尺右边 returnarray_merge($left_array,array($base_num),$right_array); } publicfunctiontest(){ $arr=array(4,3,1,2,8,9); var_dump($arr); echo'
'; $arr=$this->quick_sort($arr); var_dump($arr); }
二分查找
publicfunctionbin_search($arr,$low,$high,$k){ if($low<=$high){ $mid=intval(($low+$high)/2); if($arr[$mid]==$k){ return$mid; }elseif($k<$arr[$mid]){ return$this->bin_search($arr,$low,$mid-1,$k); }else{ return$this->bin_search($arr,$mid+1,$high,$k); } } return-1; } publicfunctiontest(){ $arr=array(1,2,3,4,5,6,7,8,9,10); var_dump($arr); echo'
'; $arr=$this->bin_search($arr,0,8,4); var_dump($arr); }
顺序查找
publicfunctionseq_search($arr,$n,$k){ $array[$n]=$k; for($i=0;$i<$n;$i++){ if($arr[$i]==$k){ break; } } if($i<$n){ return$i; }else{ return-1; } } publicfunctiontest_suanfa(){ $arr=array(1,2,3,4,5,6,7,8,9,10); var_dump($arr); echo'
'; $arr=$this->seq_search($arr,4,4); var_dump($arr); }
线性表的删除
publicfunctiondelete_array_element($array,$i){ $len=count($array); for($j=$i;$j<$len;$j++){ if(isset($array[$j+1])){ $array[$j]=$array[$j+1]; } } array_pop($array); return$array; } publicfunctiontest(){ $arr=array(1,2,3,4,5,6,7,8,9,10); var_dump($arr); echo'
'; $arr=$this->delete_array_element($arr,4); var_dump($arr); }
字符串翻转
publicfunctionstrrev($str){ $rev_str=''; if($str==''){ return0; } for($i=(strlen($str)-1);$i>=0;$i--){ $rev_str.=$str[$i]; } return$rev_str; } publicfunctiontest(){ $arr='hellowwolrd'; var_dump($arr); echo'
'; $arr=$this->strrev($arr); var_dump($arr); }
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。