PHP算法
一,实现快速排序
1 <?php 2 function quickSort($arr) { 3 $len=count($arr) ; 4 if($len<=1) { 5 return $arr; 6 } 7 $key=$arr[0]; 8 $left_arr=array(); 9 $right_arr=array(); 10 for($i=1;$i<$len;$i++) { 11 if($arr[$i]<=$key) { 12 $left_arr[]=$arr[$i]; 13 }else { 14 $right_arr[]=$arr[$i]; 15 } 16 } 17 $left_arr=quickSort($left_arr); 18 $right_arr=quickSort($right_arr); 19 return array_merge($left_arr,array($key),$right_arr); 20 21 } 22 $table=array(45,12,65,23,67,66,22,78,42); 23 print_r(quickSort($table));
方法是
1、建立一个quickSort()的函数,首先设置先设置一个变量为该数组的第一位,
2、接下来的该数组数值与第一位比较,若大于第一位,则分化到$right_arr这个数组里去,反之,则划分到$left_arr的数组里;
3、然后$right_arr和$left_arr在不断调用quickSort()这个函数;
4、使用array_merge()将所有分开的数组合并为一个数组。
二、冒泡法
1 <?php 2 function maopaoSort($array){ 3 $len=count($array); 4 if($len<=1) { 5 return $array; 6 } 7 for($i=0;$i<$len;$i++) { 8 for($j=$len-1;$j>$i;$j--) { 9 if($array[$j]>$array[$j-1]){ 10 $tmp=$array[$j]; 11 $array[$j]=$array[$j-1]; 12 $array[$j-1]=$tmp; 13 } 14 } 15 } 16 return $array; 17 } 18 19 $arr=array(32,43,21,54,15,17,13,18,43,87); 20 print_r(maopaoSort($arr));
三、杨辉三角
1 <?php 2 function yanghui($n){ 3 for($i=0;$i<$n;$i++){ 4 for($j=0;$j<=$i;$j++){ 5 if($j==0||$i==$j){ 6 $arr[$i][$j]=1; 7 }else { 8 $arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j]; 9 } 10 echo $arr[$i][$j]."\t"; 11 } 12 echo "<br>"; 13 } 14 } 15 yanghui(10);
四、二分法
1 <?php 2 /**二分查找:查找一个值在数组中的位置 3 * @$arr:操作的数组,前提是按顺序排列 4 * @$val:查找的值 5 * @$low:查找的起始位置,默认从数组的第一个数找起 6 * @hight:查找的结束位置 7 **/ 8 function binarySearch($arr, $val, $hight, $low=0){ 9 while($low <= $hight){ 10 $mid = ceil($low + ($hight - $low) / 2); 11 if($arr[$mid] == $val){ 12 return $mid; 13 }elseif($arr[$mid] > $val){ 14 $hight = $mid -1; 15 }else{ 16 $low = $mid +1; 17 } 18 } 19 return -1; 20 } 21 header('Content-Type:text/html; charset=utf-8'); 22 23 //产生一个数组 24 $arr = range(0,20); 25 echo '<pre>'; 26 print_r($arr); 27 echo '</pre>'; 28 29 $low = 0; 30 $hight = count($arr) - 1; 31 $findVal = rand(0, 20); 32 $index = binarySearch($arr, $findVal, $hight, $low); 33 printf("查找的值 '%d' 在数组中的下标 '%s'", $findVal, $index); 34 ?>