1 // 它的工作原理是每一次从待排序的数据元素中选出最小的一个元素(循环一圈就会把一个最小的值放在此次循环的$i上),将该元素放到该轮的索引位置(该轮的索引指外层循环的$i)上, 2 function SelectSort(array $container) 3 { 4 $count = count($container); 5 for ($i = 0; $i < $count; $i++){ 6 $k = $i; 7 for ($j = $i + 1; $j < $count; $j++){ 8 if($container[$j] < $container[$k]){ 9 $k = $j; 10 } 11 } 12 if($k != $i){ 13 $temp = $container[$i]; 14 $container[$i] = $container[$k]; 15 $container[$k] = $temp; 16 } 17 } 18 return $container; 19 } 20 21 //假设测试这个数组[45,23,12,55,6]; 22 // 第一次外循环 23 $k = $i = 0; 24 $j=$i+1; 25 // 内循环第一次 26 $k = 0;$j = 1;$container[$j] = $container[1] = 23; $container[$k] = $container[0] = 45; $k索引上的值大于$j索引上的的值所以此时 $k = $j =1; 27 // 内循环第二次 28 $k = 1;$j = 2;$container[$j] = $container[2] = 12; $container[$k] = $container[1] = 23; $k索引上的值大于$j索引上的的值所以此时 $k = $j =2; 29 // 内循环第三次 30 $k = 2;$j = 3;$container[$j] = $container[3] = 55; $container[$k] = $container[2] = 12; $k索引上的值小于$j索引上的的值所以此时 $k没有进入if判断中,所以$k还是2; 31 // 内循环第四次 32 $k = 2;$j = 4;$container[$j] = $container[4] = 6; $container[$k] = $container[1] = 12; $k索引上的值大于$j索引上的的值所以此时 $k = $j =4; 33 //此时内层循环结束,$k=$j=4; 34 因为$k=4;$i=0;不相等,所以$temp = $container[$i] = 45; $container[$i] = $container[$k] = 6; $container[$k] = $temp = 45; 35 此时原数组变为[6,23,12,55,45],第一轮循环将6这个最小值放在循环开始的初始位置 36 //第二次外循环 37 [6,12,23,55,45] 38 //第三次外循环 39 [6,12,23,55,45] 40 //第四次外循环 41 [6,12,23,45,55] 42 // 第四次循环结束完成排序