当前位置:Gxlcms > PHP教程 > php实现二路归并排序

php实现二路归并排序

时间:2021-07-01 10:21:17 帮助过:31人阅读

 1$arr = [9, 43, 12, 0, 87, 1];
 2function merge_sort(&$arr){
 3     _merge_sort($arr, $arr, 0, count($arr) - 1);
 4}
 5 6function _merge_sort(&$s_arr, &$d_arr, $i, $j){
 7if($i > $j){
 8return;
 9    }
10if($i == $j){
11echo 'aa';
12$d_arr[$i] = $s_arr[$i];
13returnfalse;
14    }
15$tmp_arr = array();
16$m = intval(($i + $j)/2);
17echo$m;
18if($i <= $m){
19         _merge_sort($s_arr, $tmp_arr, $i, $m);
20    }
21if($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里面
27function merge(&$s_arr, &$d_arr, $start, $m, $end){
28$i = $start; $j = $m+1;$d_i = $i;
29while($i <= $m && $j <= $end){
30if($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    }
37while($i <= $m){
38$d_arr[$d_i++] = $s_arr[$i++];
39//$i++;40    }
41while ($j <= $end) {
42$d_arr[$d_i++] = $s_arr[$j++];
43    }
44 }

以上就介绍了php实现二路归并排序,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

人气教程排行