php 3种排序算法

2019-11-26

1、冒泡排序

$al = [2, 1, 6, 8, 12, 23, 0, 1, 2];
function mp($al)
{
    $len = count($al);
    for ($i = 1; $i < $len; $i++) {
        for ($j = 0; $j < $len - $i; $j++) {
            if ($al[$j] > $al[$j + 1]) {
                $temp = $al[$j + 1];
                $al[$j + 1] = $al[$j];
                $al[$j] = $temp;
            }
        }
    }
    return $al;
}
print_r(mp($al));

2、选择排序

$ab = [2, 1, 6, 8, 12, 23, 0, 1, 2];
function xp($ab)
{
    $len = count($ab);
    for ($i = 0; $i < $len; $i++) {
        $m = $i;
        for ($j = $i; $j < $len; $j++) {
            if ($ab[$j] < $ab[$m]) {
                $m = $j;
            }
        }
        $temp = $ab[$m];
        $ab[$m] = $ab[$i];
        $ab[$i] = $temp;
    }
    return $ab;
}
print_r(xp($ab));

3、快速排序

$q = [2, 1, 6, 8, 12, 23, 0, 1, 2];
function kp($q)
{
    $len = count($q);
    if ($len <= 1) {
        return $q;
    }
    $base_num = $q[0];
    $left = [];
    $right = [];
    for ($i = 1; $i < $len; $i++) {
        if ($q[$i] < $base_num) {
            $left[] = $q[$i];
        } else {
            $right[] = $q[$i];
        }
    }
    $left = kp($left);
    $right = kp($right);
    return array_merge($left, (array) $base_num, $right);
}
print_r(kp($q));

{/if}