这是今天学习的第二个算法,比冒泡更优秀一点的算法,叫做选择排序法,他的时间复杂度也是O(n2),别看他和冒泡的复杂度是一样的,但还是有点逻辑方面还是有点差别:选择排序进行的交换操作很少,最多会发生 N - 1次交换.
function selection_sort($array){
$count=count($array);
for($i=0;$i<$count-1;$i++){
$min=$i;
for($j=$i+1;$j<$count;$j++){
if($array[$min]>$array[$j]){
$min=$j;
}
}
if($min!=$i){
$temp=$array[$min];
$array[$min]=$array[$i];
$array[$i]=$temp;
}
echo '<pre>';
echo '第'.($i+1)."次排序的结果";
var_dump($array);
echo '<br>';
}
return$array;
}
$old_array=array(20, 40, 60, 80, 30, 70, 90, 10, 50, 0);
selection_sort($old_array);
上面是算法的代码,数值还是一样的,但是算法逻辑改变了,结果当然也是一样的。
最后还是来句总结该算法的结语:循环个数总数,将该循环键的值与后面所有的对比,将后面最小值的位置与循环键的值位置进行交换,最小的永远会在最前面排着