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 ?>

 

posted @ 2015-05-12 20:18  todaytoday  阅读(241)  评论(0编辑  收藏  举报