JavaScript选择排序

JavaScript选择排序

1 思想

选择排序思想如下:

  1. 找到数组中最大(最小)的元素;
  2. 将该元素与数组中第一个元素交换位置(如果第一个元素就是最大或者最小的元素那么就和自己交换位置)
  3. 在剩下的元素中找到最大(小)的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。

从上面的过程可以看出,选择排序在不断地选择剩余元素中的最大(小)者。

例如,当前有数组 [4, 7, 2, 8, 0, 3] 从小到大排序,它的选择排序过程如下:

步骤数组说明
1[0, 7, 2, 8, 4, 3]数组中0最小,与数组中第一个位置的4交换位置
2[0, 2, 7, 8, 4, 3]剩下(0之后)的数组中,2最小,与第二个位置的7交换位置
3[0, 2, 3, 8, 4, 7]剩下(2之后)的数组中,3最小,与第三个位置的7交换位置
4[0, 2, 3, 4, 8, 7]剩下(3之后)的数组中,4最小,与第四个位置的8交换位置
5[0, 2, 3, 4, 7, 8]剩下(4之后)的数组中,7最小,与第五个位置的8交换位置

2 代码

从小到大排序代码如下:

let arr = [4, 7, 2, 8, 0, 3]; // 要排序的数组

// 外层循环,从该位置取数据,剩下最后一个数字无需选择排序,因此-1
for (let i = 0; i < arr.length - 1; i++) {
    let min = i; // 初始时假设当前最小数据的下标为i,并记录在min中
    // 内层循环,找出最小的数字下标
    for (let j = min + 1; j < arr.length; j++) {
        // 如果记录的最小数字大于当前循环到的数组数字
        if (arr[min] > arr[j]) {
            min = j; // 将min修改为当前的下标
        }
    }
    // 内层循环结束,此时min记录了剩余数组的最小数字的下标
    // 将min下标的数字与i位置的数字交换位置
    let temp = arr[min];
    arr[min] = arr[i];
    arr[i] = temp;
}

console.log(arr); // [ 0, 2, 3, 4, 7, 8 ]

从大到小排序只需修改上述代码的第9行,“>”修改为“<”,代码如下:

let arr = [4, 7, 2, 8, 0, 3];

// 外层循环,从该位置取数据,剩下最后一个数字无需选择排序,因此-1
for (let i = 0; i < arr.length - 1; i++) {
    let min = i; // 初始时假设当前最小数据的下标为i,并记录在min中
    // 内层循环,找出最小的数字下标
    for (let j = min + 1; j < arr.length; j++) {
        // 如果记录的最小数字大于当前循环到的数组数字
        if (arr[min] < arr[j]) {
            min = j; // 将min修改为当前的下标
        }
    }
    // 内层循环结束,此时min记录了剩余数组的最小数字的下标
    // 将min下标的数字与i位置的数字交换位置
    let temp = arr[min];
    arr[min] = arr[i];
    arr[i] = temp;
}

console.log(arr); // [ 8, 7, 4, 3, 2, 0 ]
  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值