php实现二路归并排序
2016-05-02 17:41
671 查看
$arr = [9, 43, 12, 0, 87, 1]; function merge_sort(&$arr){ _merge_sort($arr, $arr, 0, count($arr) - 1); } function _merge_sort(&$s_arr, &$d_arr, $i, $j){ if($i > $j){ return; } if($i == $j){ echo 'aa'; $d_arr[$i] = $s_arr[$i]; return false; } $tmp_arr = array(); $m = intval(($i + $j)/2); echo $m; if($i <= $m){ _merge_sort($s_arr, $tmp_arr, $i, $m); } if($m+1 <= $j ){ _merge_sort($s_arr, $tmp_arr, $m+1, $j); } merge($tmp_arr, $d_arr, $i, $m, $j); } //$s_arr中的$start到$m与$m到$end两个序列都是有序的,将这两个序列合并到$d_arr里面 function merge(&$s_arr, &$d_arr, $start, $m, $end){ $i = $start; $j = $m+1;$d_i = $i; while($i <= $m && $j <= $end){ if($s_arr[$i] > $s_arr[$j]){ $d_arr[$d_i++] = $s_arr[$i++]; //$i++; }else{ $d_arr[$d_i++] = $s_arr[$j++]; } } while($i <= $m){ $d_arr[$d_i++] = $s_arr[$i++]; //$i++; } while ($j <= $end) { $d_arr[$d_i++] = $s_arr[$j++]; } }
function merge_sort(&$src) { $end = count($src) - 1; $tmp = array(); _merge_sort($src, $src, 0, $end); } /* * 将数组$src_arr从序列$s到$e根据里面的值有序的复制到$to_arr */ function _merge_sort(&$src_arr, &$to_arr, $s, $e) { if ($s > $e) { return $to_arr; } if ($s == $e) { $to_arr[$s] = $src_arr[$s]; return $to_arr; } $m = ceil( ($s + $e)/2 ); $tmp_arr = array(); //将数组$src_arr分别从$s到$m - 1,从$m到$e有序的复制到$tmp_arr中 if ($s < $m) { _merge_sort($src_arr, $tmp_arr, $s, $m - 1); } if ( $e >= $m ) { _merge_sort($src_arr, $tmp_arr, $m, $e); } // merge($tmp_arr, $to_arr, $s, $m, $e); } /* * $src_arr从$s到$m与从$m到$e分别是一个从小到大的数组 * 现将这样这样两个有序的数组合并为一个有序的数组$to_arr */ function merge(&$src_arr, &$to_arr, $s, $m, $e) { $j = $m; $to_i = $s; while ($s < $m && $j <= $e) { if ($src_arr[$s] < $src_arr[$j]) { $to_arr[$to_i++] = $src_arr[$s++]; } else { $to_arr[$to_i++] = $src_arr[$j++]; } } while ($s < $m) { $to_arr[$to_i++] = $src_arr[$s++]; } while ($j <= $e) { $to_arr[$to_i++] = $src_arr[$j++]; } return $to_arr; }
相关文章推荐
- ftp服务在iptables防火墙设置
- PHPSTORM_设置配置优化
- pureftp部署和优化
- 如何调试PHP程序
- php限制文件下载速度的代码
- PHP大量数据循环时内存耗尽问题的解决方案(适用于导出大量数据时内存耗尽情况)
- PHP加密代码
- php显示动态时间源代码
- PHP中Web Service应用
- 深入学习PHP内核
- 设置IIS7/IIS7.5的FTP支持断点续传
- php中echo 与print 的区别
- CGI,FastCGI,PHP-CGI与PHP-FPM(转)
- 分享6款国内、国外开源PHP轻论坛CMS程序
- php实现按天数、星期、月份查询的搜索框
- PHP变量的定义与相应的数据类型
- PHP变量的定义与相应的数据类型
- PHP变量的定义与相应的数据类型
- PHP基本的语法结构
- PHP基本的语法结构