算法整理(php語言完成),持續更行中......
阿新 • • 發佈:2017-05-26
== 排序 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語言完成),持續更行中......