在要排序的一组数中,选出最小的一个数与第一个位置的数交换。

然后在剩下的数当中再找最小的与第二个位置的数交换,

如此循环到倒数第二个数和最后一个数比较为止。

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
$arr = [1, 43, 54, 62, 21, 66, 32, 78, 36, 76, 39];

function select_sort($arr)
{
// 双重循环完成,外层控制轮数,内层控制比较次数
$len = count($arr);
// 循环 数组 的长度,也就是Key
for($i = 0; $i < $len - 1; $i++) {
// 先假设最小的值的位置
$p = $i;
// 从 $i的下一个键开始循环
for($j = $i + 1; $j < $len; $j++) {
// 找出比 $p 对应值 还要小的 键
($arr[$j] < $arr[$p]) && $p = $j;
# // $arr[$p] 是当前已知的最小值
# if($arr[$p] > $arr[$j]) {
# // 比较,发现更小的,记录下最小值的位置;
# // 并且在下次比较时采用已知的最小值进行比较。
# $p = $j;
# }
}
// 已经确定了当前的最小值的位置,保存到$p中。
// 如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
// 俩个键发生了变化,就开始排序
if ($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}

//返回最终结果
return $arr;
}