标签: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_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 }
标签:merge logs 使用 二分 没有 while bsp div 程序
原文地址:http://www.cnblogs.com/zzq919101/p/6907627.html