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

來源:互聯網
上載者:User

標籤: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語言完成),持續更行中......

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.