PHP实现:二分归并排序

# 分
function slice($arr)
{
  if (sizeof($arr) <= 1) {
    return $arr;
  }

  $mid = intval(sizeof($arr) / 2);

  $left = array_slice($arr, 0, $mid);
  $right= array_slice($arr, $mid);

  $larr = slice($left);
  $rarr = slice($right);

  $merge = merge($larr , $rarr);
  show_array($merge);
  return $merge;
}

#归并
function merge($arr_left , $arr_right){
  $min = [];
  while(sizeof($arr_left) && sizeof($arr_right)){
    $min[] = $arr_left[0] < $arr_right[0] ?
        array_shift($arr_left) : array_shift($arr_right);
  }

  $arr = [];
  if(sizeof($min) > 0){
    if (sizeof($arr_left) >0 ) {
      $arr += array_merge($min , $arr_left);
    }

    if (sizeof($arr_right) >0 ) {
      $arr += array_merge($min , $arr_right);
    }
  }
  return $arr;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容