1. 程式人生 > >算法整理(php語言完成),持續更行中......

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

== 排序 pre cnblogs 部分 兩個 div function col

一下所有實例中,均在同一個方法中,所以算法使用內部函數完成

  • 歸並排序
 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語言完成),持續更行中......