示例#1
0
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);
}
示例#2
0
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));
}
示例#3
0
文件: quick.php 项目: jinguanio/david
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);
}
示例#4
0
function quick(&$data, $low, $high)
{
    if ($low < $high) {
        $point = partition($data, $low, $high);
        quick($data, $low, $point - 1);
        quick($data, $point + 1, $high);
    }
}