03-选择排序

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)