快速排序

本文写于2016-09-30 16:04

$arr = [72,6,57,88,60,42,83,73,48,85];
function quickSort(&$arr, $left , $right) {
  if ($left >= $right) {
   return;
  }
  $r    = $right;
$l    = $left;
$judge = $left; // 基准数下标
$index = $judge; // 上一个'位置'索引
$key  = $arr[$judge];
while ($l < $r) {
  // 从后往前找, 比基准数小的
  while ($l < $r && $arr[$r] > $key) {
    $r--;
  }
  $arr[$index] = $arr[$r];
  $index = $r;
  // 从前往后找, 比基准数大的
  while ($l < $r && $arr[$l] <= $key) {
    $l++;
  }
  $arr[$index] = $arr[$l];
  $index = $l;
}
$arr[$index] = $key;
// 左区间
quickSort($arr, $left , $index - 1);
// 右区间
quickSort($arr, $index + 1 , $right);
}
quickSort($arr, 0, count($arr) - 1);
printArr($arr);

function printArr(&$arr) {
  foreach ($arr as $li) {
  echo $li . ' ';
}
echo PHP_EOL;
}

你可能感兴趣的:(快速排序)