$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;
}

  

最新文章

  1. Linux 下测试网卡性能命令iperf 的用法
  2. sql 中set和select区别
  3. vue-cli webpack 引入jquery
  4. Guava学习笔记:Google Guava 类库简介
  5. oracle 卸载
  6. IE下实现类似CSS3 text-shadow文字阴影的几种方法
  7. 强大的日志分析工具 -- NSLogger
  8. Spring(3.2.3) - Beans(4): p-namespace &amp; c-namespace
  9. CentOS-6.4安装配置Nginx
  10. TestNg的xml配置
  11. 201521123050 《Java程序设计》第9周学习总结
  12. Vue路由vue-router
  13. hdu 5012(bfs)
  14. Oracle 迁移某用户的数据到Sql Server
  15. 记使用talend从oracle抽取数据时,数字变为0的问题
  16. Java包装类及其拆箱装箱
  17. RAID : 独立磁盘冗余阵列(Redundant Array of Independent Disks)
  18. 使用vue脚手架(vue-cli)快速搭建项目
  19. Android解决Intent中的数据重复问题
  20. textbox显示定位到最后一行(最新一行)

热门文章

  1. Oracle的体系结构
  2. UDP套接口编程
  3. jquery提示信息 tips
  4. Programming pages of Jasper Neumann
  5. 查看系统和PowerShell版本
  6. jQuery分别获取选中的复选框值
  7. 以优美方式编写JavaScript代码
  8. loading-show-hide
  9. The sound of silence引发的关于互联网以及教育的利弊思考
  10. EF 预热