php冒泡排序与快速排序实例详解
本文实例分析了php冒泡排序与快速排序算法。分享给大家供大家参考,具体如下:
$a=array('3','8','1','4','11','7'); print_r($a); $len=count($a); //从小到大 for($i=1;$i<$len;$i++) { for($j=$len-1;$j>=$i;$j--) if($a[$j]<$a[$j-1]) {//如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了 $x=$a[$j]; $a[$j]=$a[$j-1]; $a[$j-1]=$x; } } print_r($a);j //另一种方法从小到大 $b=array('4','3','8','9','2','1'); $len=count($b); for($k=1;$k<$len;$k++) { for($j=$len-1,$i=0;$i<$len-$k;$i++,$j--) if($b[$j]<$b[$j-1]){ //如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了 $tmp=$b[$j]; $b[$j]=$b[$j-1]; $b[$j-1]=$tmp; } print_r($b); echo" "; } //下面的这个执行效率更高 functionmaopao($arr) { $len=count($arr); for($i=1;$i<$len;$i++)//最多做n-1趟排序 { $flag=false;//本趟排序开始前,交换标志应为假 for($j=$len-1;$j>=$i;$j--) { if($arr[$j]<$arr[$j-1])//交换记录 {//如果是从大到小的话,只要在这里的判断改成if($arr[$j]>$arr[$j-1])就可以了 $x=$arr[$j]; $arr[$j]=$arr[$j-1]; $arr[$j-1]=$x; $flag=true;//发生了交换,故将交换标志置为真 } } if(!$flag)//本趟排序未发生交换,提前终止算法 return$arr; } } $shuz=array('2','4','1','8','5'); $bb=maopao($shuz); print_r($bb); //快速排序 functionkuaisu($arr){ $len=count($arr); if($len<=1){ return$arr; } $key=$arr[0]; $left_arr=array(); $right_arr=array(); for($i=1;$i<$len;$i++){ if($arr[$i]<=$key){ $left_arr[]=$arr[$i]; }else{ $right_arr[]=$arr[$i]; } } $left_arr=kuaisu($left_arr); $right_arr=kuaisu($right_arr); returnarray_merge($left_arr,array($key),$right_arr); } $arr=array(23,98,54,2,9,62,34); print_r(kuaisu($arr));
希望本文所述对大家php程序设计有所帮助。