首页 > 代码库 > 算法整理(php语言完成),持续更行中......

算法整理(php语言完成),持续更行中......

一下所有实例中,均在同一个方法中,所以算法使用内部函数完成

  • 归并排序
 1 public function test1Action () {
 2     $tmp = 0;
 3     $al_merge = function($arrA,$arrB)use (&$tmp)
 4     {
 5         $arrC = array();
 6         while(count($arrA) && count($arrB)){
 7             //这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,
 8             //不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用
 9             $arrC[] = $arrA[‘0‘] < $arrB[‘0‘] ? array_shift($arrA) : array_shift($arrB);
10         }
11 
12         return array_merge($arrC, $arrA, $arrB);
13     };
14     //归并排序主程序
15     $function1 =  function($arr)use(&$function1,&$al_merge,&$tmp){
16         $len = count($arr);
17         if($len <= 1)
18             return $arr;//递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组
19         $mid = intval($len/2);//取数组中间
20         $left_arr = array_slice($arr, 0, $mid);//拆分数组0-mid这部分给左边left_arr
21         $right_arr = array_slice($arr, $mid);//拆分数组mid-末尾这部分给右边right_arr
22         $left_arr = $function1($left_arr);//左边拆分完后开始递归合并往上走
23         $right_arr = $function1($right_arr);//右边拆分完毕开始递归往上走
24         $arr = $al_merge($left_arr, $right_arr);//合并两个数组,继续递归29         return $arr;
30     };
31     $arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9);
32     print_r($function1($arr));die();
33 }
  • 二分法查找(递归)
 1 public function test1Action () {
 2     $array = array(1,2,3,4,5,6,7,8,9);
 3     $search = function ($array,$low,$height,$value)use (&$search) {
 4         if ( $low > $height ) {
 5             return ‘没有找到合适的值‘;
 6         } else {
 7             $mid = floor(($low+$height)/2);
 8             if ( $value == $array[$mid] ) {
 9                 return $mid;
10             } elseif ( $value < $array[$mid] ) {
11                 return $search($array,$low,$mid-1,$value);
12             } else {
13                 return $search($array,$mid+1,$height,$value);
14             }
15         }
16     };
17     $result = $search($array,0,count($array),9);
18     echo $result;die();
19 }
  • 二分法查找(非递归)
     1 public function test1Action () {
     2     $array = array(1,2,3,4,5,6,7,8,9);
     3     $search = function ($array,$low,$height,$value)use (&$search) {
     4         while ( $low < $height ) {
     5             $mid = intval(($low+$height)/2);
     6             if ( $value == $array[$mid] ) {
     7                 return $mid;
     8             } elseif ( $value < $array[$mid] ) {
     9                 $height = $mid-1;
    10             } else {
    11                 $low = $mid + 1;
    12             }
    13         }
    14     };
    15     $result = $search($array,0,count($array),9);
    16     echo $result;die();
    17 }

     

算法整理(php语言完成),持续更行中......