选择排序是一种不稳定的算法。基本思路是:他是将每次 2 个数据都比较完之后,记录一个最大值或者最小值,不急着交换,(这是和冒泡排序的差别,减少了交换的次数,所以效率会高),等一轮循环比较完毕之后,再把无序区最靠近有序区的那个数和当前记录的值交换,每次循环只交换一次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Select { public function __invoke(array $args) { $length = count($args) - 1; for ($i = 0; $i < $length; $i++) { $k = $i; for ($j = $i + 1; $j < $length; $j++) { if ($args[$j] < $args[$k]) { $k = $j; } }
if ($k != $i) { $tmp = $args[$i]; $args[$i] = $args[$k]; $args[$k] = $tmp; }
} return $args; } }
$data = [3, 5, 1, 2, 8, 6, 7, 9];
$sort = new Select(); $sortData = $sort($data);
print_r($sortData);
|