php实现快速排序

function quick_sort(&$arr) {
    _quick_sort($arr, 0, count($arr) - 1);
}
function _quick_sort(&$arr, $start, $end) {
    if ($start >= $end) {
        return;
    }
    #$middle = partition($arr, $start, $end);
    #$middle = partition2($arr, $start, $end);
    $middle = partition3($arr, $start, $end);
    _quick_sort($arr, $start, $middle - 1);
    _quick_sort($arr, $middle + 1, $end);
}

function partition(&$arr, $start, $end) {
    $tmp = $arr[$start];
    while($start < $end) {
        while($start < $end && $arr[$end] >= $tmp) {
            $end--;
        }
        swap($arr, $start, $end);
        while($start < $end && $arr[$start] <= $tmp) {
            $start++;
        }
        swap($arr, $start, $end);
    }
    return $start;
}

function partition2(&$arr, $start, $end) {
    $tmp = $arr[$end];
    while($start < $end) {
        while($start < $end && $arr[$start] <= $tmp) {
            $start++;
        }
        swap($arr, $start, $end);
        while($start < $end && $arr[$end] >= $tmp) {
            $end--;
        }
        swap($arr, $start, $end);
    }
    return $start;
}

function partition3(&$arr, $start, $end) {
    $middle = ceil(($start + $end)/2);
    echo $middle;
    while($start < $end) {
        while($start < $end && $arr[$start] <= $arr[$middle]) {
            $start++;
        }
        while($start < $end && $arr[$end] >= $arr[$middle]) {
            $end--;
        }
        swap($arr, $start, $end);
    }
    if ($start != $middle) {
        swap($arr, $start , $middle);
    }
    return $start;
}

function swap(&$arr, $i, $j) {
    $tmp = $arr[$i];
    $arr[$i] = $arr[$j];
    $arr[$j] = $tmp;
}
$arr = [7,1,8,3,8,5,0];
#$arr = [8,8,5,7];
#echo partition3($arr, 0, count($arr) -1);
quick_sort($arr);
print_r($arr);

  

posted @ 2016-05-02 19:49  天空中的蜂蜂  阅读(153)  评论(0编辑  收藏  举报