Aspiring PHPER

个人站

持续做一件事,必定有所成就#


PHP 快速排序

高快省的排序算法—快速排序。

/**
 * 快速排序
 *
 * @param  array $value 待排序数组
 * @param  array $left  左边界 (0)
 * @param  array $right 右边界 (n-1)
 *
 * @return array $value 排序数组(从小到大)
 */
function quick(&$value, $left, $right)
{
    // 左右界重合 跳出
    if ($left >= $right) {
        return;
    }
    $point = $left;
    $i = $right;
    $j = $left;
    while ($i > $j) {
        //查右边值
        while ($i > $point) {
            if ($value[$i] < $value[$point]) {
                $tmp = $value[$i];
                $value[$i] = $value[$point];
                $value[$point] = $tmp;
                $point = $i;
                break;
            }
            --$i;
        }
        //查左边值
        while ($j < $point) {
            if ($value[$j] > $value[$point]) {
                $tmp = $value[$j];
                $value[$j] = $value[$point];
                $value[$point] = $tmp;
                $point = $j;
                break;
            }
            ++$j;
        }
    }
    // 开始递归
    // 以当前索引为分界
    // 开始排序左部分
    quick($value, $left, $i-1);
    // 开始排序右边部分
    quick($value, $i+1, $right);
    return $value;
}