选择排序算法实现的逻辑是:从一组待排序元素中选择最小的元素,和待排序元素起始位置进行交换;第一次排序时将所有元素中最小的元素和第一位交换;第二次排序时将第二位开始所有元素中最小的元素和第二位交换,第三次排序时将第三位开始所有元素中最小的元素和第三位交换;以此类推,每次都从剩余待排序元素中选择最小值交换到待排序元素的起始位置。
以下是php实现选择排序的代码
<?php
$array = [1,3,9,5,2,8,7,6,4];
function select_sort($array)
{
for ($i = 0;$i < count($array);$i++){
$lowKey = $i;
for ($j = $i + 1;$j < count($array);$j++){
if ($array[$j] < $array[$lowKey]){
$lowKey = $j;
}
}
$tmp = $array[$i];
$array[$i] = $array[$lowKey];
$array[$lowKey] = $tmp;
}
return $array;
}
$array = select_sort($array);
print_r($array);
排序结果
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
为更好理解选择排序算法,下面将选择过程打印出来
<?php
$array = [1,3,9,5,2,8,7,6,4];
function select_sort($array)
{
for ($i = 0;$i < count($array);$i++){
echo "####\n";
$lowKey = $i;
for ($j = $i + 1;$j < count($array);$j++){
if ($array[$j] < $array[$lowKey]){
$lowKey = $j;
}
}
$tmp = $array[$i];
$array[$i] = $array[$lowKey];
$array[$lowKey] = $tmp;
echo "从".$i."-".count($array)."位中选最小值放在第{$i}位\n";
echo "结果:".implode(",",$array)."\r\n\r\n";
}
return $array;
}
$array = select_sort($array);
打印结果
####
从0-9位中选最小值放在第0位
结果:1,3,9,5,2,8,7,6,4
####
从1-9位中选最小值放在第1位
结果:1,2,9,5,3,8,7,6,4
####
从2-9位中选最小值放在第2位
结果:1,2,3,5,9,8,7,6,4
####
从3-9位中选最小值放在第3位
结果:1,2,3,4,9,8,7,6,5
####
从4-9位中选最小值放在第4位
结果:1,2,3,4,5,8,7,6,9
####
从5-9位中选最小值放在第5位
结果:1,2,3,4,5,6,7,8,9
####
从6-9位中选最小值放在第6位
结果:1,2,3,4,5,6,7,8,9
####
从7-9位中选最小值放在第7位
结果:1,2,3,4,5,6,7,8,9
####
从8-9位中选最小值放在第8位
结果:1,2,3,4,5,6,7,8,9
以上便是选择排序算法的选择过程。