Merge Sort

Tue. December 13, 2011
Categories: PHP
Tags:
function merge_sort(&$array) { 
  if (count($array) < 2) return; 
 
  $mid   = count($array) / 2;
  $left  = array_slice($array, 0, $mid);
  $right = array_slice($array, $mid);
 
  merge_sort($left);
  merge_sort($right);
 
  if (end($left) <= $right[0]) {
    $array = array_merge($left, $right);
    return;
  }
 
  // Merge
  $array = array(); 
 
  $i = 0;
  $j = 0;
 
  while ($i < count($left) && $j < count($right)) {
    if ($left[$i] <= $right[$j]) {
      $array[] = $left[$i];
      $i++;
    } else {
      $array[] = $right[$j];
      $j++;
    }
  }
 
  for (; $i < count($left); $i++) {
    $array[] = $left[$i];
  }
  for (; $j < count($right); $j++) {
    $array[] = $right[$j];
  }
 
}