JavaScript选择排序

Posted 橘猫吃不胖~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ]

以上是关于JavaScript选择排序的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript——冒泡排序和选择排序详解

选择排序之javascript

2021-8-5 复习排序算法

javascript排序算法整理

JavaScript经典算法—— 排序类

JavaScript经典算法—— 排序类