PHP基础排序算法(四)快速排序

PHP基础排序算法之快速排序

= $arr[$index]) {
                $arr_left[] = $arr[$x];
            }
            else {
                $arr_right[] = $arr[$x];
            }
        }
    }
    $arr_left = quickSortDescOne($arr_left);
    $arr_right = quickSortDescOne($arr_right);
    return array_merge($arr_left, array($arr[$index]), $arr_right);
}


/**
 * @方案二
 * @desc 快速排序算法ASC
 * @author lxs
 */
function quickSortAscTwo(&$arr, $left, $right) {
    $index = floor(($left + $right)/2);
    $f = $arr[$index];      //分界值
    $ltemp = $left;
    $rtemp = $right;

    while ($ltemp < $rtemp) {
        while ($arr[$ltemp] < $f) {
            ++$ltemp;
        }
        while ($arr[$rtemp] > $f) {
            --$rtemp;
        }
        if ($ltemp <= $rtemp) {
            $t = $arr[$ltemp];
            $arr[$ltemp] = $arr[$rtemp];
            $arr[$rtemp] = $t;
            ++$ltemp;
            --$rtemp;
        }
    }
    if ($ltemp == $rtemp) {
        $ltemp++;
    }

    if ($left < $rtemp) {
        quickSortAscTwo($arr, $left, $ltemp-1);
    }
    if ($ltemp < $right) {
        quickSortAscTwo($arr, $rtemp+1, $right);
    }
}


/**
 * @方案二
 * @desc 快速排序算法ASC
 * @author lxs
 */
function quickSortDescTwo(&$arr, $left, $right) {
    $index = floor(($left + $right)/2);
    $f = $arr[$index];      //分界值
    $ltemp = $left;
    $rtemp = $right;

    while ($ltemp < $rtemp) {
        while ($arr[$ltemp] > $f) {
            ++$ltemp;
        }
        while ($arr[$rtemp] < $f) {
            --$rtemp;
        }
        if ($ltemp <= $rtemp) {
            $t = $arr[$ltemp];
            $arr[$ltemp] = $arr[$rtemp];
            $arr[$rtemp] = $t;
            ++$ltemp;
            --$rtemp;
        }
    }
    if ($ltemp == $rtemp) {
        $ltemp++;
    }

    if ($left < $rtemp) {
        quickSortDescTwo($arr, $left, $ltemp-1);
    }
    if ($ltemp < $right) {
        quickSortDescTwo($arr, $rtemp+1, $right);
    }
}


/**
 * @desc 测试
 */
$arr = array(23,13,33,44,53,4,6,22,489,2,2,3,2,65,89,320,54,360,11,999);
$count = count($arr);
$res_asc_one = quickSortAscOne($arr);
$res_desc_one = quickSortDescOne($arr);
quickSortAscTwO($arr, 0, $count-1);
$arr2 = array(23,13,33,44,53,4,6,22,489,2,2,3,2,65,89,320,54,360,11,999);
$count2 = count($arr2);
quickSortDescTwO($arr2, 0, $count2-1);
echo '
';
print_r($res_asc_one);
print_r($res_desc_one);
print_r($arr);
print_r($arr2);
echo '
';


你可能感兴趣的:(php)