PHP算法

1. 冒泡排序
//方法一
function bubble($array)
{
    $count = count($array);

    for ($i=0; $i < $count; $i++) { 
        for ($j=$i+1; $j < $count; $j++) { 
            if ($array[$i] > $array[$j]) {
                $temp = $array[$i];
                $array[$i] = $array[$j];
                $array[$j] = $temp;
            }
        }
    }
}

$array = [2,1,5,4,7,9,0];
//------------result------------//
Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 4
    [4] => 5
    [5] => 7
    [6] => 9
)
//方法二
function array_sort($arr)
{
    $result = [];
    while (true) {
        $low = array_shift($arr);//将第一个元素弹出,此时$arr=[2,7,5];
        if ($arr) {
            foreach ($arr as $k => $v) {
                if ($low > $v) {//若$low>$v,则交换位置
                    $arr[$k] = $low;
                    $low = $v;
                }
            }           
        } else {
            $result[] = $low;
            break;
        }

        $result[] = $low;
    }

    return $result;
}

$arr = [4,2,7,5];
//------------result------------//
Array
(
    [0] => 2
    [1] => 4
    [2] => 5
    [3] => 7
)
 在数组相同长度下,经测试,方法二执行速度略快于方法一。
2. 约瑟夫环(猴王问题)
function king($n, $m)
{
    $monkey = range(1, $n);

    $i = 0;
    while (count($monkey) > 1) {
        $i += 1;
        $head = array_shift($monkey); //出列最前面的猴子

        if ($i % $m != 0) { //如果不能被$m整除,则将该猴子返回数组尾部,否则出列
            array_push($monkey, $head);
        }
    }

    return current($monkey);
}

//------------result------------//
echo king(10, 7);// 9

你可能感兴趣的:(PHP算法)