欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

php实现二路归并排序 - 天空中的蜂蜂

程序员文章站 2022-05-24 08:31:37
...
 1 $arr = [9, 43, 12, 0, 87, 1];
 2 function merge_sort(&$arr){
 3     _merge_sort($arr, $arr, 0, count($arr) - 1);
 4 }
 5 
 6 function _merge_sort(&$s_arr, &$d_arr, $i, $j){
 7     if($i > $j){
 8         return;
 9     }
10     if($i == $j){
11         echo 'aa';
12         $d_arr[$i] = $s_arr[$i];
13         return false;
14     }
15     $tmp_arr = array();
16     $m = intval(($i + $j)/2);
17     echo $m;
18     if($i $m){
19         _merge_sort($s_arr, $tmp_arr, $i, $m);
20     }
21     if($m+1 $j ){
22         _merge_sort($s_arr, $tmp_arr, $m+1, $j);
23     }
24     merge($tmp_arr, $d_arr, $i, $m, $j);
25 }
26 //$s_arr中的$start到$m与$m到$end两个序列都是有序的,将这两个序列合并到$d_arr里面
27 function merge(&$s_arr, &$d_arr, $start, $m, $end){
28     $i = $start; $j = $m+1;$d_i = $i;
29     while($i $m && $j $end){
30         if($s_arr[$i] > $s_arr[$j]){
31             $d_arr[$d_i++] = $s_arr[$i++];
32             //$i++;
33         }else{
34             $d_arr[$d_i++] = $s_arr[$j++];
35         }
36     }
37     while($i $m){
38         $d_arr[$d_i++] = $s_arr[$i++];
39         //$i++;
40     }
41     while ($j $end) {
42         $d_arr[$d_i++] = $s_arr[$j++];
43     }
44 }