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程序设计有所帮助。