PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
php三种基础算法:冒泡,插入和快速排序法
$array=array(2,3,5,6,9,8,1); //冒泡排序思想,前后元素比较 functionsort_bulldle($array){ $num=count($array); for($i=0;$i<$num;$i++){ $tmp=$array[$i]; for($j=$i-1;$j>=0;$j--){ if($tmp<$array[$j]){ $arr[$j+1]=$arr[$j]; $arr[$j]=$tmp; }else{ break; } } } return$array; } //插入排序思想,就是从第二个元素开始,到最后一个元素都是这个需要排序的元素 functionsort_bulldle($arr){ for($i=1,$len=count($arr);$i<$len;$i++){ $tmp=$arr[$i]; for($j=$i-1;$j>=0;$j--){ if($tmp<$arr[$j]){ $arr[$j+1]=$arr[$j]; $arr[$j]=$tmp; }else{ break; } } } return$arr; } //快速排序,找一个基准点把数组分成两组比较 functionsort_bulldle($array){ $num=count($array); if($num<=1){ return$array; } $base_num=$array[0]; $left_array=array(); $right_array=array(); for($i=1;$i<$num;$i++){ if($base_num>$array[$i]){ $left_array[]=$array[$i]; }else { $right_array[]=$array[$i]; } } $left_array=sort_bulldle($left_array); $right_array=sort_bulldle($right_array); returnarray_merge($left_array,array($base_num),$right_array); }
本文实例总结了PHP常用排序算法。分享给大家供大家参考,具体如下:
classbevin{ public$public='public'; private$private='private'; protected$protected='protected'; //final$final='final'; static$static='static'; function__construct(){ $this->protected='changeprivate'; } publicfunctionsetValue($a){ self::$static=$a; } publicfunctiongetValue(){ echo$this->private; } function__destruct(){ echo'asdfsadf'; } } classpaixu{ //基本排序 publicfunctiont_sortArray($array){ if(is_array($array)&&count($array)>1){ for($i=0;$i<count($array);$i++){ for($j=($i+1);$j<count($array);$j++){ $temp=$array[$i]; if($array[$j]<$array[$i]){ $array[$i]=$array[$j]; $array[$j]=$temp; } } } return$array; }else{ return$array; } } //冒泡排序 publicfunctionc_sortArray($array){ if(!is_array($array)||count($array)<=1){return$array;} $status=false; foreach($arrayas$key=>$v){ if($key>0){ if($array[$key-1]>$array[$key]){ $array[$key]=$array[$key-1]; $array[$key-1]=$v; $status=true; } } } if($status){ return$this->c_sortArray($array); }else{ return$array; } } //快速排序 publicfunctionv_sortArray($array){ if(!is_array($array)||count($array)<=1){return$array;} if(count($array)>2){ $m=$array[floor(count($array)/2)+1]; }else{ if($array[0]>$array[1]){ $temp=$array[0]; $array[0]=$array[1]; $array[1]=$temp; } return$array; } $leftarray=array(); $rightarray=array(); foreach($arrayas$key=>$v){ if($v>$m){ $rightarray[]=$v; } if($v<$m){ $leftarray[]=$v; } if($v==$m){ $mid[]=$v; } } $nleftarray=$this->v_sortArray($leftarray); $nrightarray=$this->v_sortArray($rightarray); returnarray_merge($nleftarray,$mid,$nrightarray); } //直接插入排序 publicfunctioni_sortArray($array){ if(!is_array($array)||count($array)<=1){return$array;} $newarray=array($array[0]); $temp=0; foreach($arrayas$k=>$v){ if($k>0){ if($v>=$newarray[count($newarray)-1]){ $newarray[]=$v; }else{ foreach($newarrayas$nk=>$nv){ if($v<$nv){ $temparray=array(); foreach($newarrayas$ck=>$cv){ if($ck<$nk){ $temparray[$ck]=$cv; }elseif($ck==$nk){ $temparray[$ck]=$v; $temparray[($ck+1)]=$cv; }else{ $temparray[($ck+1)]=$cv; } } $newarray=$temparray; break; } } } } } return$newarray; } } $bevin=newpaixu; $array=array(5,4,5,4,4,5,5,5,5,5); $v=$bevin->t_sortArray($array); print_r($v); $v=$bevin->c_sortArray($array); print_r($v); $v=$bevin->v_sortArray($array); print_r($v); $v=$bevin->i_sortArray($array); print_r($v);
运行结果:
Array ( [0]=>4 [1]=>4 [2]=>4 [3]=>5 [4]=>5 [5]=>5 [6]=>5 [7]=>5 [8]=>5 [9]=>5 ) Array ( [0]=>4 [1]=>4 [2]=>4 [3]=>5 [4]=>5 [5]=>5 [6]=>5 [7]=>5 [8]=>5 [9]=>5 ) Array ( [0]=>4 [1]=>4 [2]=>4 [3]=>5 [4]=>5 [5]=>5 [6]=>5 [7]=>5 [8]=>5 [9]=>5 ) Array ( [0]=>4 [1]=>4 [2]=>4 [3]=>5 [4]=>5 [5]=>5 [6]=>5 [7]=>5 [8]=>5 [9]=>5 )
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php排序算法总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php常用函数与技巧总结》、《PHP错误与异常处理方法总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。