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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。