標籤:merge logs 使用 二分 沒有 while bsp div 程式
一下所有執行個體中,均在同一個方法中,所以演算法使用內建函式完成
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_arr21 $right_arr = array_slice($arr, $mid);//拆分數組mid-末尾這部分給右邊right_arr22 $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語言完成),持續更行中......