function quick(&$list, $left = 0, $right = 0) { if ($left >= $right) { return; } $base = $list[$left]; $i = $left; $j = $right; while ($j != $i) { # 先找小于base的值 while ($i < $j && $list[$j] >= $base) { $j--; } # 再找大于base的值 while ($i < $j && $list[$i] <= $base) { $i++; } if ($j != $i) { $tmp = $list[$i]; $list[$i] = $list[$j]; $list[$j] = $tmp; } } # 相遇时的值 一定小于或等于base $tmp = $list[$j]; $list[$j] = $base; $list[$left] = $tmp; quick($list, $left, $j - 1); quick($list, $j + 1, $right); }
function quick($list = []) { if (count($list) <= 1) { return $list; } $base = array_shift($list); $left = []; $right = []; foreach ($list as $val) { $val > $base ? $right[] = $val : ($left[] = $val); } return array_merge(quick($left), (array) $base, quick($right)); }
function quick($arr) { $n = count($arr); if ($n <= 1) { return $arr; } $mid = $arr[0]; $left = $right = []; for ($i = 1; $i < $n; $i++) { if ($arr[$i] > $mid) { $right[] = $arr[$i]; } else { $left[] = $arr[$i]; } } $left = quick($left); $right = quick($right); return array_merge($left, [$mid], $right); }
function quick(&$data, $low, $high) { if ($low < $high) { $point = partition($data, $low, $high); quick($data, $low, $point - 1); quick($data, $point + 1, $high); } }