走近科学

tien的随笔

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

什么鬼面试都要问,心累

1、冒泡

相邻两个两两比较

$test = [300, 242334, 234, 123, 333, 456, 23, 54234, 99, 898888,100, 111];

function bubble($test)
{
    $len = count($test);
    for ($i= 0; $i < $len - 1; $i++) { 
        for ($j = 0; $j < $len - 1 - $i; $j++) { 
            if ($test[$j] > $test[$j + 1]) {
                list($test[$j], $test[$j + 1]) = [$test[$j + 1], $test[$j]];
            }
        }
    }
    return $test;
}

2、选择

从小到大:认为外层循环的那个值就是最小的,最要内层循环的值比我大就跟我换

function select($test)
{
    $len = count($test);
    for ($i=0; $i < $len - 1; $i++) { 
        for ($j= $i + 1; $j < $len; $j++) { 
            if ($test[$i] > $test[$j]) {
                list($test[$i], $test[$j]) = [$test[$j], $test[$i]];
            }
        }
    }
    return $test;
}

3、插入

// 取出数组的第二个开始 我认为我前面已经排好序了,都比我小,
// 我先跟我前面的值比一下,如果我比他还小,我跟他换一下,我再去跟他前面的比一下,
// 直到我不比我前面的小了,说明前面的都比我小,后面的都比我大,我的位置就确定了

function insert($test)
{
    $len = count($test);

    for ($i = 1; $i < $len; $i++) { 
        $tmp = $test[$i];
        for ($j = $i -1 ; $j >= 0; $j--) { 
            if ($tmp < $test[$j]) {
                $test[$j + 1] = $test[$j];
                $test[$j] = $tmp;
            }
        }
    }

    return $test;
}

  

4、快排

    function quick($test) {
        if (count($test) < 2) return $test;
        $mid = $test[0];
        $left = $right = [];
        // 注意从1开始,排除$mid的干扰
        for ($i = 1; $i < count($test); $i++) {
            if ($mid > $test[$i]) {
                $left[] = $test[$i];
            } else {
                $right[] = $test[$i];
            }
        }
        $left = quick($left);
        $right = quick($right);
        return array_merge($left, [$mid], $right);
    }

  

posted on 2021-03-31 21:46  _tien  阅读(64)  评论(0编辑  收藏  举报