PHP实现:二分归并排序

2017-01-04  本文已影响0人  JennyGump
# 分
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;
}

上一篇 下一篇

猜你喜欢

热点阅读