排序之选择排序

选择排序

1 动画

img

2 思想

在未排序序列中找到最小的元素,放到已排序序列的末尾。

又或者这么说,找到整个序列中的第小值放至第一位,接着找到第二小的值并将其放至第二位,以此类推。

3 解法

const selectionSort = arr => {
    const length = arr.length
    let minIndex, temp
    for (let i = 0; i < length - 1; i++) { // 循环 length-1 次
        minIndex = i // 保存一轮中最小的数索引
        for (let j = i + 1; j < length; j++) { // 从未排序序列的第一位开始找
            if (arr[j] < arr[minIndex]) {
                minIndex = j
            }
        }
        // 将最小的数放到已排序序列末尾
        if (minIndex != i) {
            temp = arr[i]
            arr[i] = arr[minIndex]
            arr[minIndex] = temp
        }
    }
    return arr
}

4 分析

时间复杂度
  • 最佳情况:O(n²)

  • 最差情况:O(n²)

  • 平均情况:O(n²)

稳定性

不稳定。举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值