php常见的一些基础算法
1.冒泡算法
冒泡算法是将一个未排序的序列,从前往后对相邻的两个值依次进行对比和调整,大的值下沉,小的值上冒。
$arr = array(12,45,23,25,14,9,5,46,56,98,57); function bsort($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; }
2.选择排序
选择排序是在一组未排序的序列中选出最小的一个数与第一个位置数据交换,在剩下的序列中选出第二小的一个数放在第二个位置,直到倒数第二个数字和倒数第一个数字比较为止。
$arr = array(12,45,23,25,14,9,5,46,56,98,57); function selectsort($arr){ $len = count($arr); for($i=0;$i<$len-1;$i++){ $mixm=$i; for($j=$i+1;$j<$len;$j++){ if($arr[$mixm]>$arr[$j]){ $mixm = $j; } if($mixm!=$i){ $tmp=$arr[$mixm]; $arr[$mixm]=$arr[$i]; $arr[$i]=$tmp; } } } return $arr; }
3.插入排序
在要排序的一组数组中,假如前面的数已经排序好顺序的,现在要将第n个数插入到已经排序的数组中,使得插入之后任然是有序的排序。如此循环,直到排好为止。
$arr = array(12,45,23,25,14,9,5,46,56,98,57); function insertsort($arr){ $len = count($arr); for($i=1;$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; }
4.快速排序
选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排的序列分成两个部分,一部分比基准元素小,另一部分比基准元素大,此时基准元素已经在其排好序列的正确位置,然后使用同样的办法递归的排序划分的两部分。
$arr = array(12,45,23,25,14,9,5,46,56,98,57); function quicksort($arr){ $len = count($arr); if($len<=1){ return $arr; } $base=$arr[0]; $minArr=array(); $maxArr=array(); for($i=1;$i<$len;$i++){ if($base>$arr[$i]){ $minArr[]=$arr[$i]; }else{ $maxArr[]=$arr[$i]; } } $minArr=quicksort($minArr); $maxArr=quicksort($maxArr); return array_merge($minArr,array($base),$maxArr); }