ES6算法---选择排序 Selection Sort

原理:每一次内循环遍历寻找最小数的下标min,并在这次内循环结束后交换 min 和 j 的位置。

时间复杂度

  • 最优时间复杂度:O(n2)
  • 最坏时间复杂度:O(n2)
  • 稳定性:不稳定
function selection_sort(arr) {
  let len = arr.length
  for (let j = 0; j < len-1; j++) {
    let min = j
    for (let i = j + 1; i < len; i++) {
      if (arr[min] > arr[i]) {
        min = i
      }
    }
    if (min !== j) {
      [arr[min], arr[j]] = [arr[j], arr[min]]
      // console.log(arr)
    }
  }
}
let arr = [7, 4, 3, 67, 34, 1, 8]
selection_sort(arr) // [ 1, 3, 4, 7, 8, 34, 67 ]

解析:将每一次外循环的值,和内循环中的值依次比较,如果在内循环中找小于自己的值,就将min这个下标指向内循环中的较小值的下标,之后在循环中比较较小值和下一个值,最后找到内循环中最小值的下标,内循环结束后将内循环最小值和外循环值交换。
循环参数: 外循环: 0–>n-2, 内循环:j+1–>n-i

这里解释下为什么这种排序是不稳定的,假设一个数组有重复数

let arr = [1, '4', 3, 67, 34, 4, 7, 8] // `4`和4完全相同,加引号是为了说明方便

取最小值:[1, 3, '4', 4, 7, 8, 34,  67]
取最大值:[ 67, 34, 8, 7, '4', 4, 3, 1] 翻转后-->[1, 3, 4, '4', 7, 8, 34,  67]

聪明你发现了吗,两种排序后重复值4位置竟然发生了改变,所以这种算法是不稳定的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值