选择排序

发布日期:2017-05-15 阅读量:384

一、原理

       首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

二、实现

    1、PHP

function selectionSort($array)
{
    if (!is_array($array)) { // 执行数组,执行 1次
        return [];
    }
    $n = count($array);
    if ($n <= 0) { // 空数组,执行1次
        return [];
    }
    if ($n === 1) { // 一条数据数组,执行1次
        return $array;
    }
    
    for ($i = 0; $i < $n, $i++) { // 比较轮数 执行 n次
        $minIndex = $i;
        for ($j = $i + 1; $j < $n; $j++) { // 比较次数 执行 (n-1) + (n-2)+ ... + 1 次
            if ($array[$minIndex] > $array[$j]) {
                $minIndex = $j;
            }
        }
        if ($minIndex != $i) {
            $temp = $array[$i];
            $array[$i] = $array[$minIndex];
            $array[$minIndex] = $temp;
        }
    }
    return $array;
}

    2、javascript

function selectionSort(arr)
{
    for (let i = 0; i < arr.length; i++) {
        let minIndex = i;
        for (let j = i + 1; j < arr.length; j++) {
            if (arr[minIndex] > arr[j]) {
                minIndex = j;
            }
        }
        if (minIndex != i) {
            let temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }     
    }
}

三、时间复杂度

    计算方式:1 + 1 + 1 + n * (n-1) / 2

    最终时间复杂度为O(n^2)

四、稳定性

    不稳定