选择排序原理与实现(JS)

选择排序

实现原理

选择排序是一种原址比较排序算法。大致思路是找到数据结构中的最小值并将其放置在第一位,接着找到第二小的值并将其放在第二位,以此类推。

实现代码

function selectionSort(arr) {
  if (arr.length < 2) {
    return arr;
  }
  for (var i = 0; i < arr.length - 1; i++) {
    // 初始时,假设第一个数即为最小数,记录它得下标
    var minIndex = i;
    // 从最小数的后面一个开始遍历
    for (var j = i + 1; j < arr.length; j++) {
      // 只要找到比arr[minIndex]数小 就把当前的下标赋值给minIndex
      minIndex = arr[minIndex] > arr[j] ? j : i;
      // 交换 ES6语法
      [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
    }
  }
  return arr;
}

总结

对于选择排序来说其时间复杂度:

第一次内循环比较 N - 1 次,然后是 N-2 次,N-3 次

共比较的次数是 (N - 1) + (N - 2) + … + 1,求等差数列和,得 (N - 1 + 1)* (N-1) / 2 = N^2-N / 2。
舍去最高项系数,其时间复杂度为 O(N^2)。

改排序算法不稳定会破坏原始序列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值