快速排序算法

<?php
/**
 *分解:数组A[p..r]被分成两个子数组A[p,q-1]和A[q+1..r],使得A[p..q-1]中的每个元素都小于等于A[q],而且,小于等于A[q+1..r]中的元素,下标q也在这个划分过程中进行计算。
 *解决:通过递归调用快速排序,对子数组A[p..q-1]和A[q+1..r]排序
 *合并:因为两个子数组是就地排序的,将他们的合并不需要操作:整个数组A[p..r]已经排序。
 */
function quick_sort($arr){
    _quick_sort($arr,0,count($arr)-1);
    return $arr;
}
function _quick_sort(&$arr,$i,$j){
    echo "aaa\n";
    $pivot = $arr[$i];
    $_i = $i;
    $_j = $j;
    while($i<$j){
        while($arr[$j]>=$pivot && $i<$j)
            $j--;
        if($i<$j){
            $arr[$i] = $arr[$j];
            $i++;
        }
        while($arr[$i]<=$pivot && $i<$j)
            $i++;
        if($i<$j){
            $arr[$j] = $arr[$i];
            $j--;
        }
    }
    $arr[$i]=$pivot;
    if($_i<$i-1){
        _quick_sort($arr,$_i,$i-1);
    }
    if($_j>$i+1){
        _quick_sort($arr,$i+1,$_j);
    }
}
$a = array(
    9,38, 65, 97, 76, 13, 27
);
$arr = quick_sort($a);
//var_dump($arr);
?>
原文地址:https://www.cnblogs.com/gaohuag/p/2553928.html