什么鬼面试都要问,心累
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); }
每天都是不想努力的一天....