js 排序算法(1)- 选择排序

选择排序(先看核心代码便于理解)

        选择排序的核心就是数组的每一次循环都将确定一个位置的数,循环结束后整个数组的顺序也就确定了。

例子

        数组:【5,3,1】从小到大

                遍历第一次:从【5,3,1】确定数组第一个位置为 1 并交换位置

                遍历第二次:从【3,5】确定数组第二个位置为3 并交换位置

                遍历第三次:从【5】确定数字第三个位置为5 并交换位置

思路

        由例子就可以知道,遍历一个数组,长度为N

                第一次遍历从数组 0 ~ N - 1 中找到第一个位置的数

                第二次遍历从数组 1 ~ N - 1 中找到第二个位置的数

                第三次遍历从数组 2 ~ N - 1 中找到第三个位置的数

                 ................................................................................

                第N次遍历从数组 N - 1中找到N-1个位置的数

        以从小到大排序为例子,i为下标

                第一个for循环就是确认第 i 小的位置

                第二个for循环就是为了从 i ~ N - 1 中找到第 i 小的位置

                详细可看核心代码理解

交换位置函数

const swap = (arr, i, j) => {
  let temp = arr[i];
  arr[i] = arr[j];
  arr[j] = temp;
};

核心代码

// 选择排序
for (let i = 0; i < arr.length; i++) {
  let cur = arr[i];
  let index = i;
  for (let j = i + 1; j < arr.length; j++) {
    if (cur > arr[j]) {
      index = j;
    }
  }
  swap(arr, i, index);
}

思路

        外层的每一次循环都将确定一个位置的数,但与冒泡排序确定的方向不同,选择排序是从头开始确定,冒泡排序是从后开始确定。

        以从小到大排序为例,N为数组长度

                 外层for循环就是确认第 i 的位置

                 内层for循环就是为了从 0~ i 中 找到第 i 小的数

                 找到后就交换位置

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值