js版数据结构与算法—5.2选择排序

可以看出冒泡排序是不断把大的放后面(只和最近的作比较)

选择排序是不断把小的放前面 (遍历整个后面作比较)

本人觉得快速排序虽然代码量少,但是真心不好理解,可以参照下面的图

为了方便理解,可以采用下面的记忆方式

export default arr => {
  // 选择排序
  for (let i = 0, len = arr.length, min; i < len; i++) { // 此处从0开始一个个比较
    min = arr[i] // 最小值的初始值设为当前遍历到的这个值

    // 下面整个for循环其实无非是从i的第二个开始遍历
    // 1.如果发现该数比min小,那么min变成该数,该数变成min
    // 2.遍历完成之后,i值就是最小的那个
    // 总结: 进行上面的遍历之后,就可以找到i往后最小的值,这也就是选择排序的中心思想
    for (let j = i + 1; j < len; j++) {
      if (arr[j] < min) {
        let c = min
        min = arr[j]
        arr[j] = c
      }
    }
    arr[i] = min
  }

  return arr
}
import sort from '../../code/sort/lesson1-2'

test('选择排序', () => {
  expect(sort([1, 9, 5, 3, 4])).toEqual([1, 3, 4, 5, 9])
})

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值