这种算法相对于冒泡排序而言,是找到了每趟循环中最适合的那位数的位置才选择与它进行交换。
其优势是减少了不必要的交换操作,故性能更优。
PHP代码实现参考:
/**
* 选择排序
* 相对于冒泡排序而言,是找到了每趟循环中最适合的那位数的位置才选择与它进行交换。
* 将每一趟循环中的第一个元素,与该趟中最小的元素交换
* @param unknown $arr
* @return unknown
*/
function selection_sort($arr){
$count = count($arr);
for($i=0;$i<$count-1;$i++){ // 外层控制循环趟数
$min_index = $i; // 记录当前趟最小值下标,默认为该趟的第一个元素下标
for ($j=$i+1;$j<$count;$j++){ // 内层控制每趟对比的次数
if( $arr[$min_index]>$arr[$j] ){ // 如果遇到更小的值,则更新最小记录值与其索引
$min_index = $j;
}
}
if( $min_index!=$i ){ // 将当前趟的首个元素与该趟中最小的元素进行交换
$temp = $arr[$i];
$arr[$i] = $arr[$min_index];
$arr[$min_index] = $temp;
}
}
return $arr;
}
返回主目录 [经典排序算法][PHP实现集锦]参考:
http://www.cnblogs.com/kkun/archive/2011/11/23/selection_sort.html