03-选择排序
less than a minute
1 基本思想
选择排序算法是从前往后遍历元素,每次假定当前元素为最小元素,再次遍历剩余元素,找到找到真正最小的元素,交换位置,直到元素有序。
2 算法过程
1、将第一个元素当成最小元素,跟它后面的元素逐个比较,暂存最小元素的下标,第一趟结束后,将第一个数,与暂存的那个最小数进行交换,第一个数就是最小数 2、下标移到第二位,第二个数跟后面的所有数相比,一趟下来,确定第二小数 3、重复以上步骤,直到有序
3 算法图解
4 PHP代码实现
/**
* 选择排序: 选一个假定的最小, 找到比他小的, 交换位置
* 时间复杂度: O(n2)
* 空间复杂度: O(2)
* 稳定排序
*/
function selectSort(&$arr) {
$length = count($arr);
for($i = 0; $i < $length; ++$i) {
$minIdx = $i;
for($j = $i + 1; $j < $length; ++$j) {
if ($arr[$j] < $arr[$minIdx]) {
$minIdx = $j;
}
}
if ($minIdx != $i) {
list($arr[$minIdx], $arr[$i]) = [$arr[$i], $arr[$minIdx]];
}
}
}
$arr = [38, 19, 29, 91, 85, 12, 41, 21];
selectSort($arr);
print_r($arr);
5 效率分析
1、时间复杂度O(n2) (n-1) + (n-2) + … + 1 ==> n(n-1)/2
2、空间复杂度O(1)
Last modified March 8, 2022: Fix image path (67fc7f5)