直接上代码
/**
* 选择排序
* 思路:选择数据中最小(最大)的数,放到最前面,完成排序
*
* @param array $noSortArr 需要排序的数据
* @return array
*/
function selectionSort($noSortArr) : array
{
$len = count($noSortArr);
for ($i = 0; $i < $len - 1; $i++) { //循环$len-1,原因:最后一个数就是排序的最后一个,所以就没有必要循环了
$minIndex = $i; //标记第$i为最小,也就是默认第一个数为最小
for ($j = $i + 1; $j < $len; $j++) { //循环除了第一个数之外的数
if ($noSortArr[$j] < $noSortArr[$minIndex]) {
$minIndex = $j; //如果有比标记的数小的数,则标记这个数为新的最小数,以此类推
}
}
//每轮循环结束后,把最小数放到循环数的开始位置
$temp = $noSortArr[$i];
$noSortArr[$i] = $noSortArr[$minIndex];
$noSortArr[$minIndex] = $temp;
}
return $noSortArr;
}
-欢迎大家指正和优化,谢谢!
网友评论